[英]Java bitwise operator ^ - how do the bits shuffle
這是一個小例子。
int a = 11; //1 0 1 1 is bit representation
System.out.println(~a);
Output: -12
據我了解,'~' 運算符反轉位 - 即 1 0 1 1 現在應該是 0 1 0 0 因此輸出應該是 4。我錯過了什么?
11
不表示為1011
,它表示為: -
0000 0000 0000 0000 0000 0000 0000 1011
只是您沒有注意到看到前導0's
。 請記住, int
是 32 位的。
現在, ~11
將是:-
1111 1111 1111 1111 1111 1111 1111 0100
所以,這是一個負數。 所以,取它的 2 的補碼,你會得到: -
0000 0000 0000 0000 0000 0000 0000 1011 // 1's complement
0000 0000 0000 0000 0000 0000 0000 1100 // 2's complement == -12
因此,你得到-12
。
int 比 4 多得多,它實際上在你輸入之前有一堆 0。
計算機上的負數通常表示為以 1 開頭。 a -1 一般為全 1,-2 為 ..11111111111111110,-3 為 ..1111111111111101,等等。\\
所以你得到的是一個負數,因為你把所有的零都改成了一。
如果您想查看您的號碼,請使用 ~a & 0xf
0xf 會給你一個 ...000001111 的“面具”
與此相關的任何內容都將僅保留最后 4 位,其余所有將被清零。
好問題,很高興看到人們仍在嘗試/思考這些東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.