int a = -10; unsigned int b = 6; if((a + b) > 0) { printf("a + b > 0\n"); }else{ printf("a + b <= 0\n"); }
int a = -10; unsigned int b = 6; if((a + b) > 0) { printf("a + b > 0\n"); }else{ printf("a + b <= 0\n"); }
登录后即可发布作业,立即登录
我的作业
全部作业 209
补全代码:
#include<stdio.h>
int main()
{
int a = -10;
unsigned int b = 6;
if((a + b) > 0)
{
printf("a + b > 0\n");
}else{
printf("a + b <= 0\n");
}
return 0;
}
运行结果:
思考:为什么a+b = -10+6会大于0
因为a为int型,b为unsigned int型,当进行运算的时候操作系统会发生字符的类型的强制转换
这里a的int型的位数没有b的unsigned int型的高,所以操作系统会将a的int转为unsigned int来运算。
所以运算过程如下:
a = -10的原码为:1000 0000 0000 0000 0000 0000 0000 1010
补码为:1111 1111 1111 1111 1111 1111 1111 0110
+6 0000 0000 0000 0000 0000 0000 0000 0110
结果为: 1111 1111 1111 1111 1111 1111 1111 1100 =》十进制为:4294967292
所以运算结果为a+b >0