最近我一直在學習位運算符和沿途有這樣的代碼,發現使用AND(&)位運算符的十進制數的二進制數字,代碼如下:java的瞭解位操作
byte b = -34;
for(int t = 128;t > 0; t = t/2)
{
if((b & t) != 0)System.out.println("1 ");
else System.out.println("0 ");
System.out.println("b & t yields: " + (b & t));
}
我修改了代碼以顯示在每次迭代過程中由b & t計算的值。我想了解這個代碼背後的確切機制,爲什麼它可以找到二進制數字,請解釋爲什麼每次迭代都要比較b,爲什麼每次迭代都除以2?另外,我想知道如何(b & t)通過列出二進制數字來手動計算。我的確瞭解&的工作方式,但是當我列出了34和128的二進制數字並將它們進行比較時:
1 0 0 0 0 0 0 0(128)
0 0 1 0 0 0 1 0(34) //I am unsure if the negative sign should be included
---------------
0 0 0 0 0 0 0 0
我得到的結果是0,但程序返回128這是令人困惑。
下面我還將包括程序的執行結果:
1
b & t yields: 128
1
b & t yields: 64
0
b & t yields: 0
1
b & t yields: 16
1
b & t yields: 8
1
b & t yields: 4
1
b & t yields: 2
0
b & t yields: 0
非常感激您的幫助:)
當今計算機使用二進制補碼,所以'-34'由'256-34'表示爲無符號字節。 – user202729
非常感謝,它是有道理的,現在-34和128返回128 :) – TheRelativisticPhiloSheep