int i=-20;unsigned int j=10; i+j的困惑

RogerChange 2015-11-16 03:47:14
int i=-20;
unsigned int j=10;

在vc中编译:
若采用printf("%d", i+j);结果是:-10
若采用printf("%u", i+j);结果是:4294967286

若采用cout输出,则结果是:4294967286

怎么理解这种差别?
...全文
3965 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
瑞莱克斯 2018-03-31
  • 打赏
  • 举报
回复
楼上大哥 分析的确实很细致 但是有点疑问 无符号输出时 是直接输出补码吗 那“%d”输出为什么是将计算所得的补码转换为原码输出
LiuBo_01 2018-03-21
  • 打赏
  • 举报
回复
整形数据在内存中存放二进制补码。所以数据的运算可以理解为是补码运算。 -20 的原码为: 10000000 00000000 00000000 00010100 原码 11111111 11111111 11111111 111 01011 反码 11111111 11111111 11111111 111 01100 补码 10 的补码为(正数的补码原码反码都相同): 00000000 00000000 00000000 00001010 i=-20 unsigned j=10 i+j 11111111 11111111 11111111 111 01100 + 00000000 00000000 00000000 00001010 ------------------------------------------------------------------------ = 11111111 11111111 11111111 11110110 所以i+j 的补码为: 11111111 11111111 11111111 11110110 虽然计算机存放的是补码,但输出的是原码对应的数值,最高位符号为为1,表示运算结果为负数,将i+j的补码转化为原码:(-1取反) 得: 11111111 11111111 11111111 11110110 - 1 --------------------------------------------------------------------------- 11111111 11111111 11111111 11110101 取反后为: 10000000 00000000 00000000 00001010 对应二进制数为-10,所以运算结果为-10。 至于以%u (无符号输出) 可以这样理解:无符号数是没有符号位的,都是正数。 i+j 的补码为: 11111111 11111111 11111111 11110110 所以以符号数形式输出时,输出的就是对应二进制数的大小。 即: 11111111 11111111 11111111 11110110的数值大小。 如果把这个二进制数当全是1 计算的话数值大小为 2^32-1 ,当我们当全1计算的话多加了9,所以其运算结果为2^32-1-9 = 4294967286 以上使自己的简单理解,希望对你有帮助,如有错误,欢迎指正交流。
qq_31195831 2016-08-26
  • 打赏
  • 举报
回复
666666
xman01111 2016-05-25
  • 打赏
  • 举报
回复
低级的类型 当与高级类型 进行运算时 会默认将低级类型转化为高级 像你问的 int 和unsinge 会将整形转化为无符号整形 无符号整形没有小数之说 当运算结果小于0便会出现溢出现象 0的后边不是-1而是4294967296 所以就出现了 -10是4294967286的结果
secondtop 2016-05-11
  • 打赏
  • 举报
回复
计算机计算是通过二进制计算,因为两种类型在内存上储存的方式不同,导致结果差异很大。
qq_27985735 2016-05-09
  • 打赏
  • 举报
回复
要强制转换类型 基础的问题 推荐去看高淇Java300集视频教程
kvls 2015-12-03
  • 打赏
  • 举报
回复
隐式类型转换 int转换为了unsigned int
_TheOne_ 2015-12-02
  • 打赏
  • 举报
回复
像这种情况,你需要强制类型转换
_TheOne_ 2015-12-02
  • 打赏
  • 举报
回复
像这种情况,你需要强制类型转换

2,076

社区成员

发帖
与我相关
我的任务
社区描述
华为认证、思科认证、项目管理、计算机等级考试、Linux认证、微软认证、H3C认证等IT认证相关的技术交流空间。
社区管理员
  • IT培训
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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