淡淡的心跳 发表于 2016-6-19 15:56:07

int类型溢出问题

这也没有溢出啊为什么会出现这个现象

无符号整形 发表于 2016-6-19 16:07:37

首先,longlonglongint类型不一定是16位的,他有可能是DWORD(32位)或者QWORD(64位)或者QWORDQWORD(64位)所以,这样很正常。

淡淡的心跳 发表于 2016-6-19 16:20:03

无符号整形 发表于 2016-6-19 16:07
首先,longlonglongint类型不一定是16位的,他有可能是DWORD(32位)或者QWORD(64位)或者QWORDQWORD(64 ...

99999 * 99999 = 9999800001,而9999800001根本没有超出unsigned long long int (0 -18446744073709551616 )这个范围。我已经用sizeof取出了long long int的长度了,是占用8字节。而且我直接把18446744073709551615这个娄放进 i 也可以正常显示。可为什么把 99999*99999放进 i 就会溢出呢,实在想不出来

无符号整形 发表于 2016-6-19 16:48:28

本帖最后由 无符号整形 于 2016-6-19 16:49 编辑

淡淡的心跳 发表于 2016-6-19 16:20
99999 * 99999 = 9999800001,而9999800001根本没有超出unsigned long long int (0 -1844674407370955161 ...

18446744073709551615 = 1100110011001100110011001100110011001100110011001100110011001(二进制)
=62位
≈64位
≈8字节左右
就是这样得来的

无符号整形 发表于 2016-6-19 16:50:52

再编译试试?

淡淡的心跳 发表于 2016-6-19 17:37:00

我自己来解答算了(不知道对不对)
我通过多次编译运行找出了个规律,因为C语言编译的时候会自动把占用坑位小的转换为占用坑位大的,也就是说在   int x, y ;   i = x * y 中的 x 与 y 的数据长度都是一样的,那也就是说 x * y的结果的数据长度不能超过x,y中数据长度大的一个的数据数据长度(也就是int型,因为x与y就是定义的int型),如果超过就会溢出、 不知我的这种解释对不对

淡淡的心跳 发表于 2016-6-19 17:51:10

通过再一次的实验证明我是对

xls6688 发表于 2016-6-21 00:45:40

看看

千亩计者 发表于 2016-8-15 12:13:08

是的

怎么还是菜鸟 发表于 2016-9-13 10:41:29

学习了
页: [1]
查看完整版本: int类型溢出问题