返回信息流unsigned int a=6;
int b=-20;
问a+b
put出来之后的值是大于6还是小于6,为什么?
这是一条镜像帖。来源:北邮人论坛 / cpp / #46394同步于 2010/11/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教大牛一个C++问题
yinlin
2010/11/18镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
远远大于6...
b被提升为无符号数,也就是2^32+(-20),然后再加6...
【 在 yinlin (林子) 的大作中提到: 】
: unsigned int a=6;
: int b=-20;
: 问a+b
: ...................
b是[-6,-1]间的话答案还是对的……
【 在 shenlei (我爱果子|[路]|天山南北|潇湘隐士) 的大作中提到: 】
: 远远大于6...
: b被提升为无符号数,也就是2^32+(-20),然后再加6...
b总要被强制转化成无符号数,所以在加a之前,b运用T2U的规则变换成无符号数就行了...
【 在 renne (歼灭天使 玲) 的大作中提到: 】
: b是[-6,-1]间的话答案还是对的……
弱弱的问一下,这是为什么呢,不能是加完了在转换类型吧?那加的时候是按什么规则加的呢?
【 在 renne 的大作中提到: 】
: b是[-6,-1]间的话答案还是对的……
[em17][em17][em17][em17][em17][em17]
加的时候转换类型,int提升为unsigned int,由于unsigned int没有负数值的表示,将int型的-6的值转换成相当于2^32 - 6的数值。实际上不论
上述是unsigned int 还是 int型的数,其对应的内存的实际存储内容都是一样的,只是在C语言中表示方法不一致而已。