#include<iostream.h>
int main()
{unsigned int x=9;
int y=-20;
int m=(x+y>9)?1:0;
int z=x+y;
cout<<x+y<<endl;
cout<<"m is "<<m<<endl;
cout<<"z is "<<z<<endl;
}
为什么x+y的值变为一个很大的正数
而 z=x+y等于-11
unsigned int 与 int 是如何相加的
...全文
168113打赏收藏
unsigned int 与 int 相加的问题
#include int main() {unsigned int x=9; int y=-20; int m=(x+y>9)?1:0; int z=x+y; cout<<x+y<<endl; cout<<"m is "<<m<<endl; cout<<"z is "<<z<<endl; } 为什么x+y的值变为一个很大的正数 而 z=x+y等于-11 unsigned int 与 int 是如何相加的
问题不在于相加,而在于你的z
x+y本身的类型是unsigned long,因此是一个很大的正数,当你赋值给z时,等于把一个很大的unsigned类型的数转换为signed的,当然就变成-11 了,你看看(unsigned long)(-11)等于多少就明白了
[Quote=引用楼主 JYYCOM 的帖子:]
#include <iostream.h>
int main()
{unsigned int x=9;
int y=-20;
int m=(x+y>9)?1:0;
int z=x+y;
cout < <x+y < <endl;
cout < <"m is " < <m < <endl;
cout < <"z is " < <z < <endl;
}
为什么x+y的值变为一个很大的正数
而 z=x+y等于-11
unsigned int 与 int 是如何相加的
[/Quote]
unsigned int x=9;
int y=-20;
int m=(x+y>9)?1:0; //x+y的结果被存在了一个临时变量里,而系统默认这个临时变量是unsigned int 型
//这种情况要用强制类型 int m = (int(x+y)>9)?1:0;
int z=x+y; //将结果用int型表示,也就是有符号型,所以正确
cout << y+x << endl; //跟上面的解释类似
//用 printf("%d", x+y); 这样输出结果被转化为有符号型
cout << "m is " << m << endl;
cout << "z is " << z << endl;