Java中左移和右移問題圖文詳解
1 原碼、反碼、補碼
原碼:將十進制轉化為二進制即原碼;
反碼:正數的反碼與原碼相同,負數的反碼(除卻最高位的符號位不變)與原碼相反;
補碼:正數的補碼與原碼相同,負數的補碼(除卻最高位的符號位不變)與原碼的取反加一。
舉例:5 和 -5
5:原碼:0 0000000 00000000 00000000 00000101反碼:0 0000000 00000000 00000000 00000101補碼:0 0000000 00000000 00000000 00000101-5:原碼:1 00000000 00000000 00000000 00000101反碼:1 1111111 11111111 11111111 11111010補碼:1 1111111 11111111 11111111 11111011
2 位移操作
我們需要知道將一個數字,在計算機中進行移動多少位,例如8<<1代表將8轉化為二進制在計算機中左移1位,低位補零;
<<:左移:低位補0
>>:有符號右移:正數高位補0,負數高位補1
>>>:無符號右移,高位補零
為什麼沒有無符號左移呢?因為左移的情況下隻存在補零的情況。
舉例 :5 和 -5
5<<1原碼:0 0000000 00000000 00000000 00000101左移1位:0 0000000 00000000 00000000 00001010即:10-5<<1原碼:1 00000000 00000000 00000000 00000101補碼:1 1111111 11111111 11111111 11111011左移1位:1 1111111 11111111 11111111 11110110取其補碼:1 0000000 00000000 00000000 00001010即:-105>>1原碼:0 0000000 00000000 00000000 00000101右移1位:0 0000000 00000000 00000000 00000010即:2-5>>1原碼:1 00000000 00000000 00000000 00000101補碼:1 1111111 11111111 11111111 11111011右移1位:1 1111111 11111111 11111111 11111101取其補碼:1 0000000 00000000 00000000 00000011即:-35>>>1:與5>>1一樣,都是高位補0原碼:0 0000000 00000000 00000000 00000101右移1位:0 0000000 00000000 00000000 00000010即:2-5>>>1原碼:1 00000000 00000000 00000000 00000101補碼:1 1111111 11111111 11111111 11111011右移1位:0 1111111 11111111 11111111 11111101即:2147483645
代碼運行截圖
總結:
位移操作很簡單,使用補碼移動,補齊空缺位就行,除瞭>>:補與最高位一致的;其他移動哪缺哪補零。
在java中無論截圖中的a定義成 byte,short,int哪一種類型,它默認都是使用int類型(4字節32位),你使用long(8字節64位)
3 補充操作符
~(按位非):
逐位取反
|(按位或):
一真為真1|0=1,0|0=0,1|1=1,0|1=1
&(按位與):
兩真為真1|0=0,0|0=0,1&1=1;0&1=0
^(按位異或):
相異為真1^1=01^0=10^1=10^0=0.
總結
到此這篇關於Java中左移和右移問題的文章就介紹到這瞭,更多相關Java左移和右移內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java為什麼占用四個字節你知道嗎
- Java基本數據類型族譜與易錯點梳理解析
- Java基礎-Java基本數據類型
- Java基本數據類型之間的相互轉換詳解
- 聊聊Java的switch為什麼不支持long