位運算有符號右移和無符號右移


<< :左移運算符,n<<1相當於 n*2
>> :右移運算符,n>>1相等於n/2
 >>>:無符號右移,忽略
int a=-1;
-1的32進制位:
源碼 :     0000 0000 0000 0000 0000 0000 0000 0001
反碼 :     1111 1111 1111 1111 1111 1111 1111 1110
補碼 :     1111 1111 1111 1111 1111 1111 1111 1111 (在反碼基礎上+1)
a<<2:    1111 1111 1111 1111 1111 1111 1111 1100
a>>2:    1111 1111 1111 1111 1111 1111 1111 1111  (右移兩位,左邊高位再補兩個1,所以看着沒什么變化)
a>>>2:  0011 1111 1111 1111 1111 1111 1111 1111  (無符號右移跟上個比起來就是高位不補1)
            
 
上面-1 >>2看着沒什么變化可以換成-5 試試:
int  a=-5;
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(a>>2));
System.out.println(a>>2);
11111111111111111111111111111011
11111111111111111111111111111110
-2
-------------------------------------------------------
int a=-5;
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(a>>>2));
System.out.println(a>>>2);
11111111111111111111111111111011
111111111111111111111111111110
1073741822


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM