位元移位運算子
移位運算子移向左其第一個運算元 (<<) 或向右 (>>) 的第二個運算元所指定的位置數目。
語法
移位運算式:
加法運算式移位運算式<<加法運算式移位運算式>>加法運算式
這兩個運算元必須是整數值。 此類運算子執行一般的算數轉換 ; 結果的型別是在轉換後的左運算元的型別。
Leftward 的班次,空出正確的位元是設定成 0。 為 rightward 的班次,空出左邊的位元會填滿根據第一個運算元的型別轉換之後。 如果型別是unsigned,它們會設定為 0。 否則,也會填入正負號位元的複本。 左移運算子,而不需溢位,陳述式
expr1 << expr2
相當於乘以 2expr2。 向右移位運算子
expr1 >> expr2
相當於除以 2expr2 如果expr1是不帶正負號或為非負數的值。
如果第二個運算元為負數,或右運算元是大於或等於位元升級的左運算元的寬度,移位運算的結果未定義。
執行轉換,因此由轉換運算子不會提供溢位或反向溢位的情況下,資訊可能會遺失,如果在轉換後的第一個運算元的型別無法表示移位運算的結果。
unsigned int x, y, z;
x = 0x00AA;
y = 0x5500;
z = ( x << 8 ) + ( y >> 8 );
在這個範例中, x會移向左 8 個位置和y是向右 8 個的位置。 加入變動的值,讓 0xAA55,並指派給z。
移位至右邊的負數值時,會產生一半的原始值,向下捨入。 例如,–253 (二進位 11111111 00000011) 移出右邊的一個位元,便會產生 –127 (二進位 11111111 10000001)。 正 253 班次滑鼠右鍵,會產生 +126。
向右移位保留正負號位元。 當將向右移位帶正負號的整數時,最大顯著性的位元都會使用此設定。 當將向右移位不帶正負號的整數時,則會清除的最大顯著性的位元。