java位运算符,&,|,>>>,>>,<<,<<<的区别
說明
最近讀到javaReentrantReadWriteLock 用到了位運算符 所以先看位運算符 再去學習源碼
二進制在線計算器
http://www.99cankao.com/digital-computation/binary-decimal-converter.php
補碼,反碼,原碼
https://www.cnblogs.com/shamo89/p/9846385.html
&
轉為二進制進行運算同為1時為1
如:3&5,3的二進制:11,5的二進制為101 運算后為001
計算
011
101
---
001
|
轉為二進制進行運算,同為0時為0,否則為1
如:3&5,3的二進制:11,5的二進制為101 運算后為111
011
101
---
111
<<
注:因為java int是32位所以補了一堆0
表示左移移,不分正負數,低位補0;
正數:4<<1
轉換為二進制00000000 00000000 00000000 00000100<<1
二進制向左移動1位低位補0得出00000000 00000000 00000000 00001000
轉為10進制=8
負數-4<<1
負數的二進制表示為絕對值的二進制最高位補1,10000000 00000000 00000000 00000100
反碼(最高位符號位不變)1111111111111111 11111111 111011
補碼(最低位進1)1111111111111111 11111111 1111100
補碼左移(最低位補0) 1111111111111111 11111111 111000
反碼(最高位符號位不變)1111111111111111 11111111 110111
原碼(最高位符號位不變),10000000 00000000 00000000 00001000 最高位是符號位 所以我們直接拿1000轉二進制等于8 最高位1 表示負數 所以得出-8
<<<
java沒得這個編譯出錯
>>
表示右移,如果該數為正,則高位補0,若為負數,則高位補1;
正數:r = 4 >> 1
轉換為二進制00000000 00000000 00000000 00000100
右移1位 00000000 00000000 00000000 00000010
轉為10進制 2
負數r = -4 >> 1
轉換為二進制10000000 00000000 00000000 00000100
反碼 11111111111111111111111111111011
補碼11111111111111111111111111111100
補碼右移1位 11111111111111111111111111111110
(根據補碼反推反碼)11111111111111111111111111111101
(根據反碼反推原碼)原碼10000 00000 10000 00000010
10轉二進制 2 符號位1表示負數 最終得出-2
>>>
表示無符號右移,也叫邏輯右移,即若該數為正,則高位補0,而若該數為負數,則右移后高位同樣補0
正數: r = 4 >>> 1
的結果與 r = 4>> 1 相同;
負數:r = -4 >>> 1
轉換為二進制10000000 00000000 00000000 00000100
反碼 11111111111111111111111111111011
補碼11111111111111111111111111111100
補碼右移1位(高位補0) 01111111111111111111111111111110
補碼轉10進制等于2147483646
總結
以上是生活随笔為你收集整理的java位运算符,&,|,>>>,>>,<<,<<<的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联合国的英文缩写是什么?(联合国及十七个
- 下一篇: 外显率&显性上位