[Ruby] Bitwise Shift
前言
剛好看到有人在詢問此問題,就打了一大篇,非本科系大概不知道, 應該每個語言都有 « 和 » 這個兩個 operator 吧。
可以拿 mac 的計算機來按, command+3
切到程式語言模式 ( command+1
切回來)
觀察二進位的變化。( 如下面範例的點法,就是5 + <<
和 17 + << + << + <<
)
Bitwise Shift 範例
## For integers it means bitwise left shift:
5 << 1 ## gives 10
17 << 3 ## gives 136
這邊需要把十進位數字先轉換成二進位,再來做bit的位移
5 « 1
5
的二進位0101
10
的二進位1010
<< 1
是表示往左位移 1 bit 的意思
因此0101
往左位移 1 bit,就變成 1010
(因為往左移,最高位的位元會消失,最低位元補 0)
所以 5 « 1 會得到 10
17 « 3
17
的二進位0001 0001
136
的二進位1000 1000
<< 3
是表示往左位移3 bit的意思
因此0001 0001
往左位移3 bit,就變成1000 1000
(補了3個0),也就是136
所以 17 « 3 會得到 10
為何是 2 的倍數
因為是二進位,所以每位移 1 就是 2 的幾次方倍起跳
<< 1
左移 1 位,就是多了 2^1 倍的意思,就是乘以 2 的意思
<< 2
左移 2 位,就是多了 2^2 倍的意思,就是乘以 4 的意思
…以此類推
>> 1
右移1位,就是少了2^1倍的意思,就是除以2的意思
>> 2
右移2位,就是少了2^2倍的意思,就是除以4的意思
…以此類推
簡單來說,可以理解成
5 << 1 ## 等於 10 * 2^1
17 << 3 ## 等於 17 * 2^3
5 >> 1 ## 等於 10 / 2^1
17 >> 3 ## 等於 17 / 2^3
留言