-
左移運算符
鎖定
左移運算符是一個計算機用語。用來將一個數的各二進制位全部左移若干位,移動的位數由右操作數指定,右操作數必須是非負值,其右邊空出的位用0填補,高位左移溢出則捨棄該高位。
[1]
- 中文名
- 左移運算符
- 參 數
- result
- expression1
- <
- expression2
- 任何表達式。
- 運算符
- <<
左移運算符定義簡介
用來將一個數的各二進制位全部左移若干位。例如:
左移運算符(3張)
高位左移後溢出,捨棄。
左移一位相當於該數乘以2,左移2位相當於該數乘以2^2=4。上面舉的例子15<< 2=60,即乘了4。但此結論只適用於該數左移時被溢出捨棄的高位中不包含1的情況。
例如,假設以一個字節(8位)存一個整數,若a為無符號整型變量,則a=64,即二進制數01000000時,左移一位時溢出的是0。而左移2位時,溢出的高位中包含1,則不符合上述結論。
[2]
由下表可以看出,若a的值為64,在左移一位後相當於乘2,左移2位後,值等於256。
a的值 | a的二進制形式 | a<<1 | a<<2 |
64 | 01000000 | 10000000 | 00000001,00000000 |
127 | 01111111 | 11111110 | 00000001,11111100 |
左移運算符計算方法
左移表達式的位 result = expression1 << expression2
參數 result,任何變量。
expression1,任何表達式。
expression2,任何表達式。
説明:<<運算符把expression1的所有位向左移expression2指定的位數。
[3]
例如:
var temp = 14 << 2 變量temp的值為 56,因為 14 (即二進制的 00001110)向左移兩位等於 56 (即二進制的 00111000)。
簡單介紹一種方便計算的方法:
8 << 1的值為8*2=16;
8 << 2的值為8*(2^2)=32;
8 << n的值為8*(2^n)。
左移運算符意義規則
在移位運算時,byte、short和char類型移位後的結果會變成int類型,對於byte、short、char和int進行移位時,規定實際移動的次數是移動次數和32的餘數,也就是移位33次和移位1次得到的結果相同。移動long型的數值時,規定實際移動的次數是移動次數和64的餘數,也就是移動66次和移動2次得到的結果相同。
[1]
三種移位運算符的移動規則和使用如下所示:
<<(左移)
運算規則:
按二進制形式把所有的數字向左移動對應的位數,高位移出(捨棄),低位的空位補零。
語法格式:
需要移位的數字 << 移位的次數
例如: 3 << 2,則是將數字3左移2位
計算過程:
3 << 2 首先把3轉換為二進制數字0000 0011,然後把該數字高位(左側)的兩個零移出,其他的數字都朝左平移2位,最後在低位(右側)的兩個空位補零。則得到的最終結果是0000 1100,則轉換為十進制是12。
數學意義:
>>(帶符號右移)
運算規則:
按二進制形式把所有的數字向右移動對應的位數,低位移出(捨棄),高位的空位補符號位,即正數補零,負數補1。
語法格式:
需要移位的數字 >> 移位的次數
例如11 >> 2,則是將數字11右移2位
計算過程:
11的二進制形式為:0000 1011,然後把低位的最後兩個數字移出,因為該數字是正數,所以在高位補零。則得到的最終結果是0000 0010。轉換為十進制是2。
數學意義:
右移一位相當於除2,右移n位相當於除以2的n次方。這裏是取商哈,餘數就不要了。
>>>(無符號右移)
運算規則:
按二進制形式把所有的數字向右移動對應位數,低位移出(捨棄),高位的空位補零。對於正數來説和帶符號右移相同,對於負數來説不同。 其他結構和>>相似。
[4]
左移運算符符按位
左移運算符按位方式
result=expression1 << expression2
result
expression1
expression2
任何表達式。 運算符把expression1的所有位向左移expression2指定的位數。例如:var temp
左移運算符巧用
因為位運算比×運算快,所以可對一下代碼進行優化
x=x×2;
優化
x=x<<1;
還可利用左移運算符計算a的第b個二進制位是什麼
a&(1<<b);