1
1
存储32位有符号整数时,使用位0-30作为数字,位31表示数字的符号。
现在设置了位31,表示这是一个负数。为了从二进制表示中找出一个负数,你需要取一的补码(翻转所有位),加一,然后在它前面抛出一个负号。 当你取一的补码时要小心,因为你将自己限制在32位的范围内。。。您不应该包括高于位31的位。 退房 signed number representations 了解更多信息。 |
2
1
示例程序伪代码
4字节=4*8=32位。 [0牺牲一个正数]
最大可能正整数=2147483647(大于160000000,因此40000*40000可以) 实际产品50000*50000=2500000000(大于2147483647) 然而,C标准表示,程序行为在溢出时是未定义的,在少数情况下,C程序在一些现代实现中不起作用,因为它们的溢出并不像作者所期望的那样。 http://www.gnu.org/software/autoconf/manual/autoconf-2.62/html_node/Integer-Overflow.html |
3
0
这是因为在大多数编程语言中,整数数据类型具有固定大小。 这意味着每个整数值都有一个定义的最小值和最大值。 例如,在C中,最大INT为2147483647,最小为2147483648 在PHP 64位中,它是9223372036854775807和-9223372036854775808 当你试图超过这个值时会发生什么?简单地说,计算机将产生所谓的整数溢出,值将循环回最小值。
希望它能为你清除一切! |