请问有比【unsigned long long】 更大的整型吗?
如题。
初学C,做题时写了个将年龄转为秒的程序,前126年都可以,但是从127开始就overflow了……虽然很少有人活到127,但我还是希望能为127岁以上的寿星们转换一下单位。。。。求指点~
[解决办法]
不用开任何编译选项,gcc 默认以编译器扩展的形式支持 unsigned long long 和 long long 类型。
你的问题在于那个乘法。year * second,year 的类型是 unsigned short,second 是 unsigned int。unsigned short * unsigned int 的结果是 unsigned int,已然溢出了,之后再怎么折腾都是徒劳了。
要至少先将一个操作数转换成 unsigned long long,比如 (unsigned long long)year * second。
还有,“unsigned int second = 3.156e7;” 尽量不要这么写。这样是用一个 double 初始化一个 unsigned int,虽然通常结果还是对的(双精度 double 有 53 位二进制有效数字,对付 32 位的 unsigned int 还是足够的),但是如果你不幸地碰到了一个将 double 实现为单精度类型的编译器,你就悲剧了……