各位大神,大家好!
小弟在撰寫程式時,發現 負數在計算機中是以補碼的形式存盤的,最高位是符號位
于是小弟采用-25實驗了一下,其中-25的原碼二進制是1000 0000 0000 0000 0000 0000 0001 1001
-25的補碼是1111 1111 1111 1111 1111 1111 1110 0111
int main( )
{
int a=0,b=0;
b=0xffffffffe7;//-25的補碼
a=0x8000019;//-25的原碼
printf("a=%d\n",a);
printf("b=%d\n",b);
getch();
return 0;
}
為什么a=134217753而不是25;為什么b=-25,請各位大神幫我解答一下
uj5u.com熱心網友回復:
你的補碼算錯了。。。因為:補碼=原始碼的反碼+1
所以:原始碼=補碼-1 再取反
1111 1111 1111 1111 1111 1111 1110 0111 減去一 等于 1111 1111 1111 1111 1111 1111 1110 0110
再取反:0000 0000 0000 0000 0000 0000 0001 1001 為原始碼。。。
uj5u.com熱心網友回復:
你自己都說了“負數在計算機中是以補碼的形式存盤”那么-25,存盤的時候就是 1111 1111 1111 1111 1111 1111 1110 0111,所以-25的原始碼應該在這個補碼的基礎上去計算,而不是
1000 0000 0000 0000 0000 0000 0001 1001 這個。。
uj5u.com熱心網友回復:
0x80000190x80000019
uj5u.com熱心網友回復:
因為:補碼=原始碼的反碼+1所以:原始碼=補碼-1 再取反
1111 1111 1111 1111 1111 1111 1110 0111 減去一 等于 1111 1111 1111 1111 1111 1111 1110 0110
再取反:0000 0000 0000 0000 0000 0000 0001 1001 為原始碼。。。
親,這個0000 0000 0000 0000 0000 0000 0001 1001應該是正25的原始碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/75953.html
標籤:基礎類
