【问题标题】:How to cast signed to unsigned int for 32-bit in php如何在 php 中将签名转换为 32 位的 unsigned int
【发布时间】:2018-08-25 11:12:48
【问题描述】:

我尝试在 php 中将 32 位的有符号整数转换为无符号整数。但我无法获得无符号整数的绝对值。

示例:

 $value = 65547;
  if (PHP_INT_SIZE == 8)
   {
    if ($value>0x7FFFFFFF)
    {
      $value-=0x100000000;
    }
   }

还有其他可能将有符号整数值转换为无符号整数值吗?

【问题讨论】:

  • 我不确定我是否完全理解这个问题。但是 PHP 中没有无符号整数。 PHP 会在它溢出之前自动使用floats。您的示例值 65547 (2^16 + 1) 远低于 32 位有符号整数可以存储的值 (2^31 / 0x7FFFFFFF)。
  • PHP 不支持无符号类型。如果该值是一个整数值并且,它可以存储为整数,那么它可以存储为整数。否则它会被存储为浮点数,并且它的一些最低有效数字可能会丢失。

标签: php


【解决方案1】:

http://php.net/manual/en/function.gmp-abs.php

对于 php7,您将需要 php7.0-gmp 包

对于 php5,您将需要 php5-gmp 包

var_dump((int) gmp_abs("0x7FFFFFFF"));

...返回

int(2147483647)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多