让我们假设我们正在讨论32位系统。
PHP不支持无符号INT。这意味着INT值应介于-2,147,483,648和2,147,483,647之间。 INT需要4个字节来存储32位长度的值。
这是否意味着我只有31位的值和1位的符号?或者我可以使用整个32位来存储值?
答案 0 :(得分:4)
使用整个32位。它只是默认输出函数将解释为有符号整数。如果要显示值" raw"使用方法:
printf("%u", -1); // %u for unsigned
因为PHP处理内部签名的整数,所以你只能使用位算术,但不能使用它们的加法/乘法等 - 如果你希望它们的行为类似于无符号整数。
答案 1 :(得分:1)
首先,如果你想用大数字进行计算(比如常规大于10k),你应该使用bcmath任意精度模块。
其次,官方的php实现在内部使用Two's complement来表示数字,就像几乎所有其他编译器和解释器一样。由于有符号位的entropy(如果将0计为正 [1] )为1,而31位的熵为31,则可以存储2 32 = 4 294 967 296个不同的值。您解释的方式取决于您的应用程序。
[1] - 0既不是正面也不是负面。
答案 2 :(得分:1)
据我所知,在32位系统上,可能的最大正整数是2147483647,上面的值将是浮点值,因为php中的浮点值最多可以取值10000000000000。
答案 3 :(得分:0)
通常使用32位整数,有符号和无符号之间的区别就在于您如何解释该值。例如,对于有符号和无符号,(-1)+1将为1,对于签名它是显而易见的,对于无符号它当然只有在你关闭溢出时才是真的。所以你确实有32位来存储值,它恰好是1位,其解释与其余位不同。
答案 4 :(得分:0)
两个补码最常用于存储数字,这意味着1比特不会仅仅因为符号而被浪费。
http://en.wikipedia.org/wiki/Two's_complement
在PHP中,如果一个数字溢出了平台的INT_MAX,它会将其转换为浮点值。
答案 5 :(得分:0)
2147483647是通常值2 ^ 31-1。符号为1位,-1为-1,因为我们也代表0。
来自手册: “整数的大小取决于平台,尽管大约20亿的最大值是通常的值(32位签名).64位平台的最大值通常约为9E18.PHP不支持无符号整数。整数大小可以使用常量PHP_INT_SIZE来确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX来确定。“
答案 6 :(得分:0)
是的,如果它使用无符号整数,它将使用32位来存储它,因为在这种情况下你不需要签名但因为它只支持有符号整数,所以32位系统的值为31位,1位为sign s0最大有符号整数范围是-2147483648到2147483647。