unsigned + int 的结果

oN5GrzoN 2016-01-19 03:24:02
		unsigned int i=8;
int j=-1;
cout<<i+j<<endl;
cout<<j+i<<endl;

猜猜结果是什么,
我想到了前半步,却没有想到后半步。
本来我知道j也是要转成unsigned的算结果
所以应该结果是个很大的整数,可结果却出乎意料
是 7。
怎么解释呢?
...全文
79 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2016-01-19
  • 打赏
  • 举报
回复
-1转成无符号数后是无符号数能表示的最大值,你在进行加运算,就溢出了,加1得到的结果是0,加2得到的是1.........
苏叔叔 2016-01-19
  • 打赏
  • 举报
回复
自动类型转换~
柯本 2016-01-19
  • 打赏
  • 举报
回复
这个结果当然是7啊 有符号的与无符号的运算,还是会按有符号运算的(不会将有符号的转为无符号的) 但结果会转为无符号的 无论是8+(-1)还是(-1)+8结果都是7 如果是 cout << j-i << endl; // -1-8=-9结果转为无符号的为4294967287 cout << i-j << endl; //8-(-1)结果为9

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧