C++signed 與unsigned理解

signed意思爲有符號的,也就是第一個位代表正負,剩餘的代表大小,例如:signed int 大小區間爲-128-127

unsigned意思爲無符號的,所有的位都爲大小,沒有負數,例如:unsigned int 大小區間爲:0-255

當然 默認爲signed

如果想要明白singed與unsigned的區別,除了這兩個基本知識,還需要了解整數在計算機中的存儲方式,以16-bit 計算機爲例,

定義 int a = 1; 那麼a的存儲方式用表格來表示

在這裏插入圖片描述
首先需要提到的一點是,在C語言中十進制的整數都會轉化爲二進制存儲在計算機。

繼續,上面所聲明的 int a = 1,也就是 int signed a =1,C語言默認a是一個signed類型。上面表格中最左端的爲最高位,最右端的爲最低位。

signed類型的整數,只用了去除最高位,剩下的15位來進行編碼的,而最高位只是用來做標記(sign),標記整數的正負,0表示正,1表示負。所以對於signed的整數,的存儲範圍是(-2^15 to 2^15-1),也就是 -32768 到 +32767的整數。
而對於unsigned的整數,其16位全部用來編碼,存儲範圍便是(0 to 2^16-1),即 0到 65535 的非負整數。所以呢 你可以聲明 int a = 1,或者 int a = -1, 但是不可以聲明 unsigned a = -1 。但是需要提到的一點是,不管整數的類型是signed 還是 unsigned,都用了16位來存儲,也就是說16位全部用來存儲數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章