让我们假设我们正在谈论 32 位系统。
PHP 不支持无符号 INT。这意味着 INT 值应介于 -2,147,483,648 和 2,147,483,647 值之间。INT 需要 4 个字节来存储一个 32 位长度的值。
那么这是否意味着我只有 31 位的值和 1 位的符号?或者我可以使用整个 32 位来存储一个值?
让我们假设我们正在谈论 32 位系统。
PHP 不支持无符号 INT。这意味着 INT 值应介于 -2,147,483,648 和 2,147,483,647 值之间。INT 需要 4 个字节来存储一个 32 位长度的值。
那么这是否意味着我只有 31 位的值和 1 位的符号?或者我可以使用整个 32 位来存储一个值?
您正在使用整个 32 位。只是默认输出函数将其解释为有符号整数。如果要显示值“原始”,请使用:
printf("%u", -1); // %u for unsigned
但是,由于 PHP 处理内部签名的整数,因此您只能对它们使用位算术,而不能使用加法/乘法等 - 如果您希望它们表现得像无符号整数。
据我所知,在 32 位系统上,可能的最大正整数是 2147483647 上面的值将是浮点值,因为 php 中的浮点值可以取值高达 10000000000000。
通常对于 32 位整数,有符号和无符号之间的区别就是您解释值的方式。例如,(-1)+1 对于有符号和无符号都是 1,对于有符号,这很明显,对于无符号,只有当你把溢出切掉时,它当然是正确的。所以你确实有 32 位来存储值,只是碰巧有 1 位的解释与其他位不同。
二进制补码最常用于存储数字,这意味着 1 位不会浪费在符号上。
http://en.wikipedia.org/wiki/Two's_complement
在 PHP 中,如果一个数字溢出平台的 INT_MAX,它会将其转换为浮点值。
2147483647 是通常的值 2^31-1。1 位表示符号和 -1,因为我们也表示 0。
来自手册:“整数的大小取决于平台,尽管通常值约为 20 亿的最大值(即 32 位有符号)。64 位平台的最大值通常约为 9E18。PHP 没有支持无符号整数。从 PHP 4.4.0 和 PHP 5.0.5 开始,可以使用常量 PHP_INT_SIZE 确定整数大小,使用常量 PHP_INT_MAX 确定最大值。
是的,如果它使用无符号整数,它将使用 32 位来存储它,因为在这种情况下您不需要符号,但由于它仅支持有符号整数,因此 32 位系统将具有 31 位的值和 1 位的符号 s0 最大值有符号整数范围是 -2147483648 到 2147483647。