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

2021-06-17 16:41:57 字數 887 閱讀 7746

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

個人認為這個符號擴充套件的規律是極其不負責任的說法,儘管這個規律不管在什麼境況下都是正確的。舉個關於符號擴充套件的例子:

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。比如乙個用乙個8 位二進位制表示 1,則是 100...

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

關於符號擴充套件的問題,我們大家讀到最多的一句關於符號擴充套件規律就是 對於無符號整型資料,要擴充套件成符號位的話,就是將擴充套件位補零,其他位保持不變。但對於有符號整型資料的符號擴充套件規律就是 符號擴充套件為補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 ...