-1在計算機中的存儲

int a = -1;
在內存中的存儲狀態爲:(0x0012FF70爲 a 的地址)
0x0012FF70:FF FF FF FF
unsigned int b = 4294967295;四字節最大整數
在內存中的存儲狀態爲:(0x0012FF6C爲 b 的地址)
0x0012FF6C:FF FF FF FF
可見-1 和 4294967295 在內存中都以 FF FF FF FF表示 
如果 變量類型是 signed int 那麼  FF FF FF FF 代表的就是 -1
如果 變量類型是 unsigned int 那麼 FF FF FF FF代表的就是最大四字節整數:4294967295
其它類型,按其所佔字節大小決定 FF 的個數,比如 char 佔一個字節 所以 -1 即爲 FF 

下面再討論一下類型轉換問題,比如
char  ch = -1;------------------------1_1
signed int  a =  ch;-----------------1_2
unsigned int  b = ch;--------------1_3
由 1_1 可知,ch在內存中的存儲狀態爲 FF 佔 1 個字節
由 1_2 可知,相當於 signed int a = (signed int ) ch;
a 佔 4個字節 而 ch只佔 1個字節 所以只能填充 a 的 低位的一個字節,其餘高位字節將由 ch  的符號位(1)來填充
即最終 a 爲 :FF FF FF FF 。前三個是由符號位填充 最後一個纔是 ch
由 1_3 可知,相當於 unsigned int b = (unsigned int ) ch ;
原理同 a 一樣最終 b 爲:FF FF FF FF
雖然 a 和 b 最都是 FF FF FF FF,但他們的表現不一樣,一個是 -1  一個是 4294967295
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章