C語言中數據溢出的問題---以char類型爲例

一、首先char類型的取值範圍是-128~127,對於127的二進制表示是:0111 1111,
-127的二進制表示是:1111 1111,那麼問題來了:-128是怎麼來的?

1、當 char ch = 128 或 ch = -0時,則二進制爲 1000 0000
計算機內存中都是按負數來處理的
當求補碼的時候會溢出,則需要先進行位擴展,變爲 1 1000 0000
然後,反碼:1 0111 1111
          補碼:1 1000 0000  ( -128 )
由於char 爲8個字節,截取後八位,變爲 1000 0000 ,則128 或 -0在內存中爲 -128
2、當 char ch = -129時, 則二進制爲 1 1000 0001
反碼:1 0111 1110
補碼:1 0111 1111
截取後八位,變爲 0111 1111 ( 127);


例如:char ch = 2000;最終計算機所讀到的數是多少呢?

2000的二進制表示是:111 1101 0000,截取八位爲:1101 0000,最高位是符號位,計算機認爲它是一個負數,而負數是以補碼的方式存儲的,所以,通過取反、加1後變爲:1011 0000,這樣ch = -48。

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