位移運算&擴展一個數的位表示

左移運算:
一個數向左移動K位,會丟棄最高的K位,包括符號位。

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
	int a = 0x40000000;
	a <<= 1;
	cout << a;//輸出爲 -2147483648
	return 0;
}

右移運算:
右移運算分爲邏輯右移和算術右移。邏輯右移是左端補k個0;算術右移是左端補k個最高有效位的值。
大部分編譯器都對有符號數使用算術右移;無符號數一定是邏輯右移。
Java裏,x>>k表示會將x算數右移k個位置,x>>>k表示對x做邏輯右移。

假定一個數據類型爲w位,若移動k >= w位,實際上移動的位數位 k mod w。
<<與>> 的優先級比+,-,*,/ 的優先級低,需要加上括號。

擴展一個數的位表示分爲無符號數的零擴展和補碼數的符號擴展。

無符號數的零擴展:
在開頭加零就行。
補碼數的符號擴展:
添加最高有效位的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章