關於整型資料符號位擴充套件的問題

2021-06-18 21:38:50 字數 1046 閱讀 3874

1、

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

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

比如乙個用乙個8

位二進位制表示

-1,則是

10000001

如果把這個書用16

位二進位制表示時,則為

11111111 10000001

高位全都是

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

2、零擴充套件就是全補零。不論其符號位是多少,高8

位全都補0.

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

中,如果把乙個

char

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

對於無符號整型資料,要擴充套件成符號位的話,就是將擴充套件位補零,其他位保持不變。但對於有符號整型資料的符號擴充套件規律就是:符號擴充套件為補1,其他位保持不變

int a;

char b;

b = -1;

a = b;

這時,在賦值語句中,就要將 char 型b變數隱性轉化成 int 型的資料,就用到符號擴充套件的知識。我們先看看變數b在記憶體中的二進位制的表示值0xff, 經過符號擴充套件後就會變位0xffff。我們看到保持低8位不變,將符號擴充套件位補1。也就驗證了符號擴充套件規律的正確性,但我們不能只看到這個規律的正確性就算完事,還要考慮這種變換背後的規律以及這種變化最本質的東西。

我們看到char型b變數擴充套件後的變為0xffff,而0xffff又是int型的變數為-1在記憶體中的二進位制表示方式。不是char型b變數擴充套件後只有將符號位用1填充才能變為-1,而是-1的int型資料在記憶體中的二進位制儲存方式為0xffff,這才是問題的關鍵!也就是char型b變數要擴充套件位int型資料,本質上就是用int型型別的資料來表示char型的值。

因此無論遇到什麼型別的整型資料擴充套件問題,就是用另一種型別的資料來表示原來的資料。

關於整型資料符號位擴充套件的問題

關於符號擴充套件的問題,我們大家讀到最多的一句關於符號擴充套件規律就是 對於無符號整型資料,要擴充套件成符號位的話,就是將擴充套件位補零,其他位保持不變。但對於有符號整型資料的符號擴充套件規律就是 原來符號位為1時,符號擴充套件位補1 原來符號位為0時,符號擴充套件位補0 其他位保持不變。剛開始自己...

關於整型資料符號位擴充套件的問題

關於符號擴充套件的問題,我們大家讀到最多的一句關於符號擴充套件規律就是 對於無符號整型資料,要擴充套件成符號位的話,就是將擴充套件位補零,其他位保持不變。但對於有符號整型資料的符號擴充套件規律就是 符號擴充套件為補1,其他位保持不變。剛開始自己也不太明白為什麼會這樣擴充套件,只是記住了這個規律,後來...

python 讀取24 位有符號整型資料

兩種辦法 一 補充成4位元組,安int方法解析 import struct fp open filename,rb 開啟檔案 chunk fp.read 3 n 讀取n個資料,占用3 n個位元組 bytess chunk i 3 i 3 3 讀取第i個資料 bytess2 bytess b x00 ...