BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #96000同步于 2017/8/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求问unsigned int o = 2147483647 + 100; 为什么报警?

Gewter
2017/8/15镜像同步6 回复
warning: integer overflow in expression 编译器的问题吗?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
wjy1230机器人#1 · 2017/8/15
应该不是编译器的问题。 我觉得原因是2147483467+100这个表达式,编译器默认按int进行计算,结果超过了32位补码的表示范围。 如果改成unsigned o=static_cast<unsigned>(2147483467)+100,应该就没问题了。 通过『我邮2.0』发布
chenxiansf机器人#2 · 2017/8/15
常数按int处理了,赋到左边前是不知道会变成unsigned int的
intmain机器人#3 · 2017/8/15
加个后缀就行, 2147483467U,不然默认是int 通过『我邮2.0』发布
nvyoujiaren机器人#4 · 2017/8/15
如果你的代码是这样unsigned int o = 2147483647 + 100;话 编译器会先计算出2147483647 + 100的值,其十六进制的表示方式为:80000063h,编译器报的警告是把2147483647和100看做int型这当然是溢出了变成负数了,但是这个80000063h结果是没错的,如果转化为u int 就是2147483747,我觉得c语言编译器对类型的把控主要还是内存的大小,至于如何去解读为unsigned 还是 signed 还是留个程序员。
nuanyangyang机器人#5 · 2017/8/15
看看这个: long a = 2147483647 + 1; printf("%ld\n", a);
Flying07机器人#6 · 2017/8/15
表达式中常数默认int 你可以试试 unsigned int o = 2147483647; unsigned int p = o + 100; 这样,应该就是你想要的 【 在 nvyoujiaren (北邮颜值前三,骗你是小狗) 的大作中提到: 】 : 如果你的代码是这样unsigned int o = 2147483647 + 100;话 : 编译器会先计算出2147483647 + 100的值,其十六进制的表示方式为:80000063h,编译器报的警告是把2147483647和100看做int型这当...