簡體   English   中英

Java 按位運算符 ^ - 位如何洗牌

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM