移位操作有邏輯移位和算術移位
邏輯移位是不考慮符號位的移位,算術移位是考慮符號位的移位。
1、無符號移位
例如右移
unsigned char x = 0x80
二進位制 表示是 1000 0000 ,十進位制是128
右移動一位,低位補0 變為 0000 0000 ,十進位制是 0
unsigned char x = 0x80; unsigned
char y = (x << 1
); printf(
"%.2x\n
", y );
輸出 00h
二進位制表示 0000 0000 ,十進位制 0
這種情況是溢位了
左移unsigned char x = 0x80
左移動一位,高位補0 變為 0100 0000
unsigned char x = 0x80;unsigned char y = (x >> 1);
printf("%.2x\n", y );
輸出 40
二進位制表示 0100 0000 ,十進位制 64
移位前是128 ,移位後是64,左移一位是除2
《深入理解計算機系統》學習筆記(一)
第1章計算機系統漫遊 1.1 位 bit 位元組 8位 二進位制檔案 其他檔案 1.2 hello.c hello.i 修改文字,例如將標頭檔案內容插入 hello.s 匯程式設計序 hello.o 可重定位目標程式 二進位制 printf.o hello 可執行目標程式 二進位制 gun gun ...
深入理解計算機系統學習筆記(一)
為了說明程式的編譯過程,我們用經典的hello world程式作為例子 include int main int argc,char const argv 在linux系統中,我們用gcc編譯器將源程式檔案helloworld.c編譯成可執行目標檔案helloworld。zengwh zengwh ...
深入理解計算機系統
關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...