我曾尝试在PHP中将有符号整数转换为无符号整数 (32位),但我无法获取无符号整数的绝对值。
例如:
$value = 65547;
if (PHP_INT_SIZE == 8)
{
if ($value>0x7FFFFFFF)
{
$value-=0x100000000;
}
}
是否有其他的可能将带符号整数转换为无符号整数?
我曾尝试在PHP中将有符号整数转换为无符号整数 (32位),但我无法获取无符号整数的绝对值。
例如:
$value = 65547;
if (PHP_INT_SIZE == 8)
{
if ($value>0x7FFFFFFF)
{
$value-=0x100000000;
}
}
是否有其他的可能将带符号整数转换为无符号整数?
http://php.net/manual/zh/function.gmp-abs.php
对于php7,您需要安装php7.0-gmp软件包。
对于php5,您需要安装php5-gmp软件包。
var_dump((int) gmp_abs("0x7FFFFFFF"));
...返回
int(2147483647)
0x7FFFFFFF
仍然是一个安全的有符号值。我们需要看到当最高位变成大于7时会发生什么。例如 0xFFFFFFFF
。 - Stijn de Witt
float
。而且你的例子值65547
(2^16 + 1)远低于32位有符号整数可以存储的范围(2^31 / 0x7FFFFFFF)。 - Tobias K.