unsigned int + int型结果分析
***************************************************
更多精彩,歡迎進入:http://shop115376623.taobao.com
***************************************************
代碼如下:
? ? ? ? “//”后為調試中的結果
unsigned int a = 6; ?//a = 6 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【補碼:0000 ??0000 ??0000 ??0000 ??0000 ??0000 ??0000 ? 0110】
int b = -20; ?//b = -20 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 【補碼:1111 ? 1111 ? 1111 ? 1111 ? 1111 ? 1111 ? 1110 ??1100】unsigned int c = a + b; ?//c = 4294967282 ? ? ? ? ? ? 【補碼:1111 ? 1111 ? 1111 ? 1111 ? 1111 ? 1111 ? 1111 ? 0010】
int d = a + b; ?//d = -14 ? ?
【int d = a + b; ?//d = -14:由 ?《補碼:1111 ? 1111 ? 1111 ? 1111 ? 1111 ? 1111 ? 1111 ? 0010》減去1,再取反得到14,保留最高位符號位】
if (a+b>6){
printf(">6\n"); ? //進入此判斷,即a+b = c,而非d;
}?
else
{
printf("<=6\n");
}
 
分析:
機器在數據都是由二進制補碼表示的
 正數的補碼就是其本身
 負數的補碼是符號位不變各位取反再加一
 
 8位機的話:
 int?a?-1; ? ? ? ? ? ? ? ? ? ? ?在機器中1111?1111
 unsigned?int?b?1;??????????在機器中0000?0001
 
 如果?a+b?
 a就轉化為unsigned?int?但里面的數值是不變的?1111?1111?把他轉化成十進制2^8-1?+?b
 
 
總結
以上是生活随笔為你收集整理的unsigned int + int型结果分析的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: find_first_of()和 fin
 - 下一篇: 性别政治和零和博弈:滴滴事件教会了我们什