#include <iostream>
using namespace std;int cacul(int x,int y);
int main()
{
//------------------------------------------------
cout<<cacul(7,7)<<endl;
cout<<cacul(7,3)<<endl;
cout<<cacul(7,-7)<<endl;
cout<<cacul(7,-8)<<endl;
cout<<cacul(7,-9)<<endl; return 0;
}int cacul(int x,int y)
{
unsigned int a=x;
int c=0; (a+y)>10?(c=1):(c=2); return c;
}
这个程序的输出结果,为什么是:1
2
2
1
1实在搞不懂,前面三个我懂,可是后面的呢,7+(-8) 不是等于-1 么?不是小于10 么?那应该是返回2 的啊
既然把 (-8) 转换为了 unsigned int 类型了,那么它的二进制中的最高位 1 并不是表示符号位了,你可以自己用笔写下来对比下,假设你的机器是 32位的,那么一个int类型数据是用4个字节也就是 32 位 二进制数来存储的,(-8)的二进制补码和 7 的二进制分别如下:(-8):1111 1111 1111 1111 1111 1111 1111 1000
7:0000 0000 0000 0000 0000 0000 0000 0111它们相加后,就是
1111 1111 1111 1111 1111 1111 1111 1111
它代表的十进制数就是 4294967295 ,这个数肯定比 10 大啊,所以cacul(7,-8) 返回 1。其它几个有 负数的,你按照上面这样算下就知道结果了。