我現在知道它是如何在一行中完成的,儘管我沒有意識到爲什麼我的初稿不起作用。我想要做的是將下半部分保存到一個不同的變量中,將高字節移到右側並通過OR添加兩個數字。但是,它只是削減十六進制的下半部分並返回其餘部分。用較高的一個(8-15)一個交換低位字節(0-7)
short int method(short int number) {
short int a = 0;
for (int x = 8; x < 16; x++){
if ((number & (1 << x)) == 1){
a = a | (1<<x);
}
}
number = number >> 8;
short int solution = number | a;
return solution;
謹防移位簽名變量:符號位可能導致未定義的行爲。更好使用無符號數,或在轉換之前轉換爲無符號數。 – 2015-04-02 15:40:37
你正在做一個有符號(短)int的右移 - 這會導致實現定義的行爲(通常是算術移位)。使用無符號(短)整數來避免這個問題。 – 2015-04-02 15:40:44
在調試器中跟蹤這一點,逐步執行一條指令,並檢查每個變量的值。 – abelenky 2015-04-02 15:41:05