java中的移位运算符<<,>>,>>>
轉載自該篇博文下網友nan_python發布的評論并略作修改,侵刪
<< : 左移運算符,空位補0
>> : 算術右移運算符,空位補最高位值
>>>?: 邏輯右移運算符,空位補0
快速算出移位運算符結果方法:
在不大于自身數值類型最大位數的移位時,一個數移位n,就是將這個數乘以(左移)2的n次冪,
右移就是除,然后都取整就可以了
比如int 32位的(64位同理)
500>>3 這樣算:500/8 取整 就是62
356>>4 356/16 結果是 22
8<<3 8*8 結果是 64
如果移動過大超過了32位怎么辦?移位數和32取余得到的數字在套用上面就可以了
比如 500>>67 怎么算?(就相當于500>>3)
1. 先67對32取余 結果是3
2. 然后500/8 結果62
計算機指令中的左移就是補0,右移位運算符有2種
1. 算術右移 :移動后補的是最高位的值。
舉例:一個byte數字99 的二進制是 0110 0011
你右移4位后 補的是0 ------0000 0110
但是再看這一個:byte數字-107二進制是1001 0101 這是1開頭的
你右移4位后補的確是最高位1 -------1111 1001
2.?邏輯右移 :空位補0
針對右移,C語言一般根據編譯器/機器組合來確定用哪種,但大多數默認算術右移。JAVA明確規定x>>k是算術右移,x>>>k是邏輯右移。
話說回來之所以區分這一點我想應該是對有符號的規定吧,無符號右移肯定是邏輯的啊。最高位本
來就是0,然而對于負數最高位是1,在進行右移時算術右移的提出解決了一個很普遍的問題,那就
是負整數的除法運算,你負數除以一個正數一定是負數吧,如果沒有算數右移這一概念的提出不補
1都補0的話你得到的就是正數了,算術右移可以替代除法運算。有了這個就完美了,得到的還是負
數,符合現實中數學常識了。
總結
以上是生活随笔為你收集整理的java中的移位运算符<<,>>,>>>的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 控制 计算机某个程序自动开关,电脑自动开
- 下一篇: JavaScript特效——让文字每秒钟