零位擴充套件和符號位擴充套件

2022-02-12 02:31:16 字數 1548 閱讀 5734

1、

符號擴充套件:

當用更多的記憶體儲存某乙個有符號數時,由於符號位位於該數的第一位,擴充套件之後,符號位仍然需要位於第一位,所以,當擴充套件乙個負數的時候需要將擴充套件的高位全賦為1

;對於正數而言,符號擴充套件和零擴充套件是一樣的,因為符號位就是0

。 比如乙個用乙個8

位二進位制表示

-1,則是

10000001

如果把這個書用16

位二進位制表示時,則為

11111111 10000001

高位全都是

1,這個叫做符號擴充套件,主要用於對其運算元。

2、零擴充套件就是全補零

。不論其符號位是多少,高8

位全都補

0. 能過上面的定義可以看出在c++

中,如果把乙個

char

向乙個整形轉換的時候,就會存在著這個問題

如果你想得到乙個正數,那麼如果乙個字元的ascii

碼值是小於零的,而直接用

(int)c

進行強制型別轉換,結果是通過符號擴充套件得到的也為乙個負數。要得到正數,一定要用

(int)(unsigned char)c;

因為unsigned char

去除了c

的符號位,所以,這樣的型別轉換後,再用

(int)

進行轉換得到的就是乙個正數。

3、從上機的敘述得知,有符號數向其它型別資料轉化(如

char

到int,char

到unsigned int)

時,進行符號位擴充套件;無符號數向其它型別轉換(如

unsigned char

到int, long)

時,進行零擴充套件。

char

short

符號位擴充套件

char

unsigned char

最高位失去符號位意義,變為資料位

char

unsigned short

符號位擴充套件到short;

然後從short

轉到 unsigned short

unsigned char

char

最高位作為符號位

unsigned char

short

0擴充套件

unsigned char

float

轉換到long;

再從 long

轉換到float

4、由大資料型別向小資料型別轉換時,保留低位位元組。

unsigned long

char

保留低位位元組

unsigned long

short

保留低位位元組

示例#include

int main()   

執行結果:

sign extension: -127

zero extension: 129 

請按任意鍵繼續

. . .

原文:

C 中注意,零擴充套件和符號位擴充套件

首先,介紹一下兩種擴充套件的定義 符號擴充套件 當用更多的記憶體儲存某乙個有符號數時,由於符號位位於該數的第一位,擴充套件之後,符號位仍然需要位於第一位,所以,當擴充套件乙個負數的時候需要將擴充套件的高位全賦為1.對於正數而言,符號擴充套件和零擴充套件是一樣的,因為符號位就是0.比如乙個用乙個8位二...

Java中符號位擴充套件

第乙個例子 byte b 100 b在記憶體中是以補碼的形式存貯的 1001 1100 如果執行char c char b 如企鵝先生所說 b要先變為int,這時增加的位全要用b的符號位填充 這就是符號擴充套件 變為 1111 1111 1111 1111 1111 1111 1001 1100 下...

C語言的位域和符號位擴充套件

最近面試易路聯動的時候考了位域方面的只是,結果全做錯了,回來想了會也沒弄明白,後來上網查了下原來是英特爾的面試題 如下 答案為 1,0,1,4 t.b 1很好理解,t.a和t.c等於 1就不大好理解了,這個就關係到資料型別與資料在計算機中的表示了,因為顯示的時候指定的是 d型別的,那麼說明將引數當成...