【數字邏輯】理解位運算子
<<、>>、>>>是三種位運算子:
<< 左移運算子,num << n,相當於num乘以2的n次冪
>> 右移運算子,num >> n,相當於num除以2的n次冪
>>> 無符號右移,忽略符號位,空位都以0補齊(只對32位和64位有意義)
現在我們知道了這幾個運算子大概是做什麼的,再來看看例子:
首先我們需要知道十進位制怎麼轉二進位制,正數這裡就不解釋了,我們看看負數的情況:
以 -9 為例子: 9的二進位制是 1001,再按位取反,即0110,再加一得到0111。-9的二進位制就是0111了。
(1) << 運算子 ,a << b,二進位制左移b位後,低位補0
9 << 2 0000 0000 0000 0000 0000 0000 0000 1001
左移兩位 0000 0000 0000 0000 0000 0000 0010 0100
即十進位制36
-9 << 2 1111 1111 1111 1111 1111 1111 1111 0111
左移兩位 1111 1111 1111 1111 1111 1111 1101 1100
減一取反 0000 0000 0000 0000 0000 0000 0010 0100 即十進位制-36
(2)>>運算子,a >> b,二進位制右移b位,低位去掉,正數時高位補0,負數時高位補1
9 >> 2 0000 0000 0000 0000 0000 0000 0000 1001
右移兩位 0000 0000 0000 0000 0000 0000 0000 0010(高位補0)
即十進位制2
-9 >> 2 1111 1111 1111 1111 1111 1111 1111 0111
右移兩位 1111 1111 1111 1111 1111 1111 1111 1101(高位補1)
減一取反 0000 0000 0000 0000 0000 0000 0000 0011 即十進位制-3
(3)>>>運算子,a >>> b,無符號右移,只對32位和64位有意義,二進位制右移b位,低位去掉,正數和負數高位都補0
9 >>> 2 0000 0000 0000 0000 0000 0000 0000 1001
右移兩位 0000 0000 0000 0000 0000 0000 0000 0010(高位補0)
即十進位制2
-9 >>> 2 1111 1111 1111 1111 1111 1111 1111 0111
右移兩位 0011 1111 1111 1111 1111 1111 1111 1101(高位補0)
即十進位制1073741821