返回信息流warning: integer overflow in expression
编译器的问题吗?
这是一条镜像帖。来源:北邮人论坛 / cpp / #96000同步于 2017/8/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求问unsigned int o = 2147483647 + 100; 为什么报警?
Gewter
2017/8/15镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
应该不是编译器的问题。
我觉得原因是2147483467+100这个表达式,编译器默认按int进行计算,结果超过了32位补码的表示范围。
如果改成unsigned o=static_cast<unsigned>(2147483467)+100,应该就没问题了。
通过『我邮2.0』发布
如果你的代码是这样unsigned int o = 2147483647 + 100;话
编译器会先计算出2147483647 + 100的值,其十六进制的表示方式为:80000063h,编译器报的警告是把2147483647和100看做int型这当然是溢出了变成负数了,但是这个80000063h结果是没错的,如果转化为u int 就是2147483747,我觉得c语言编译器对类型的把控主要还是内存的大小,至于如何去解读为unsigned 还是 signed 还是留个程序员。
表达式中常数默认int
你可以试试
unsigned int o = 2147483647;
unsigned int p = o + 100;
这样,应该就是你想要的
【 在 nvyoujiaren (北邮颜值前三,骗你是小狗) 的大作中提到: 】
: 如果你的代码是这样unsigned int o = 2147483647 + 100;话
: 编译器会先计算出2147483647 + 100的值,其十六进制的表示方式为:80000063h,编译器报的警告是把2147483647和100看做int型这当...