符號擴充套件問題

2021-08-02 05:56:55 字數 769 閱讀 6774

(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...