首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

unsigned int跟int之间的运算

2013-07-01 
unsigned int和int之间的运算#include stdio.hint main(){unsigned int nA 10int nB -19unsigned

unsigned int和int之间的运算

#include <stdio.h>

int main()
{
unsigned int nA = 10;
int nB = -19;
unsigned int nC = 0;

nC = nA + nB;

if(nC > 0)
{
printf("%d\n", nC);
}
while(1);
        return 0;
}

这个打印出来的结果是-9,有符号数和无符号数运算,不是会自动转化成无符号的吗?那真心想不通这个结果。。。nC大于0成立了,可是打印出来的确实-9,请大神赐教,谢谢! unsigned
[解决办法]

#include <stdio.h>

int main()
{
unsigned int nA = 10;
int nB = -19;
unsigned int nC = 0;

nC = nA + nB;

if(nC > 0)
{
printf("%u\n", nC);//%d就意味着把nC当作int来解释。。改为%u就当无符号十进制解释。。
}
while(1);
        return 0;
}

[解决办法]
负数是以它的补码存储的,所以是一个大于1的数字。所以存的时候n>0,而你输出的时候是按"%d"整数形式输出,因为在内存中int类型最高位为1,被当做符号位,所以输出的时候会输出它的原码也就是一个负数。LS说得对,改成"%d"按无符号输出则int类型的最高位就不会被当做符号位了,就会输出一个整数了。
[解决办法]
换个思路,如果你是编译器,你假定nc是unsigned,那么你会比较nc和0的大小么

热点排行