1
14
所以我解决了这个问题,发现了很多关于PHP的东西(至少在它处理整数溢出的方式上)。 1) 这完全取决于机器运行在哪个平台上,哪个版本的PHP,是否运行了Suhosin加固的PHP,以及编译了多少位(32位或64位)。6台机器的行为符合我的预期(这实际上是错误的,至少根据他们的文档是错误的),3台机器的行为符合我仍然无法解释的方式,3台机器的行为符合intval命令在文档中的说明。 2) 当INT>时,Intval应该返回PHP_INT_MAX;PHP_INT_MAX(不是INT&0xffffffff),但这只发生在某些版本的PHP4和PHP5上。int>时,不同版本的PHP返回不同的值;PHP_INT_MAX。 3) 以下代码可以返回3个不同的结果(请参见1):
它可以返回(对于Intval来说似乎是正确的,但是对于&0xffffff来说是错误的)
在64位机器上,它返回(这是正确的):
无论如何,我需要一个能够在所有这些平台上工作的解决方案,并且不依赖于使用特定Max int编译的特定版本的PHP的怪癖。因此,我可以使用以下跨PHP thirtyTwoBitIntval函数:
|
2
11
如果您希望在32位和64位平台上都有32位intval的100%工作解决方案,那么我建议您使用以下解决方案:
|
3
3
在内部,PHP对大多数数字使用“整数”类型。然而,这些只是到此为止:如果您将一个大整数添加到一个大整数中,PHP将看到结果太大,无法放入一个普通整数中,并将其分配给一个浮点数。然而,浮点数(float)本身的值只有这么高,在16位数字附近有一个点,PHP将完全失去绘图功能。 有一个选项可以使用任意精度的数学 支持任何大小和精度的数字,以字符串表示 . 请参阅此处的更多信息: http://us2.php.net/bc |
5
2
概括而言,您可以这样做(请原谅任何语法错误,我很久没有接触过PHP):
|
6
1
检查您的PHP版本号-我相信,不同版本的PHP对长整数的支持可能不同,您可能会得到不同的结果。我相信在最后一个PHP5版本中有一个带有长整数的bug。 在PHP5.2.0版本中,答案与在C中得到的答案完全相同# 1617621783, 利用上面的确切功能。 phpinfo() 命令以轻松查找您的版本号。
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |