(1)無符號擴充套件
這個很簡單,就是把二進位制要擴充套件的高位 置零就行。
比如:0100,值為4。擴充套件後0000 0100,值為4.
1000,值為8。擴充套件後0000 1000,值為8.
(2)有符號擴充套件
擴充套件方法為把原最高位複製到要擴充套件的所有高位上。
比如:0100,值為4。擴充套件後0000 0100,值為4。
1010,值為-6。擴充套件後1111 1010,值為-6。
首先要明白一點:在計算機內部都是用補碼來存放數的。
原碼->補碼:
正數的補碼等於原碼。
負數的補碼為原碼符號位不變,其餘位取反,然後整個數加1(補碼=反碼+1)。也可以理解從最右側開始數第乙個1不變,向左每一位取反(除了符號位)。
補碼->原碼:
正數的原碼等於補碼。
負數的原碼等於補碼-1,再取反。反碼=補碼-1,原碼=反碼取反。也可以理解為補碼的補碼等於原碼。
在計算機內儲存的值是1010,這是一串補碼,想要知道它的值要先翻為原碼,1010的原碼為1110=-6。
1010擴充套件時遵循原最高位複製到要擴充套件所有高位上的原則,1010的擴充套件碼為1111 1010,這個擴充套件碼同樣以補碼形式儲存在計算機中,想要知道它的值要先翻為原碼,1111 1010的原碼為1000 0110=-6。
因此擴充套件前後值相等。
符號擴充套件指令
cbw 符號擴充位元組為字 convert byte to word 操作 if al 80h 0 注80h 1000b ah 0ffh else ah 00h endif 解釋 若al的最高位是1則ah ff否則ah 0 注ffh 1111b,00h 0000b cwd符號擴充字為雙字 conve...
從sprintf函式談符號擴充套件問題
這裡要注意乙個符號擴充套件的問題 比如,假如我們想列印短整數 short 1 的記憶體16 進製表示形式,在 win32 平台上,乙個 short 型佔2 個位元組,所以我們自然希望用4 個 16 進製數字來列印它 short si 1 sprintf s,04x si 產生 ffffffff 怎麼...
符號擴充套件和截斷
符號擴充套件和截斷的幾點認識 1.符號擴充套件。short inta 4 short intb 8 print binary a print binary b unsigned short intc a 型別轉換 unsigned intd a print binary c print binary...