Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php sprintf%u给出了错误的结果_Php_Unsigned_Printf_Signed - Fatal编程技术网

Php sprintf%u给出了错误的结果

Php sprintf%u给出了错误的结果,php,unsigned,printf,signed,Php,Unsigned,Printf,Signed,简单脚本,PHP5.3.13,Windows8,x32 <?php var_dump(sprintf('%u', -1380556906)); 它给了我正确的结果 string(10) "2914410390" PHP5.4.11、FreeBSD9.1、x64也提供了同样的功能 string(20) "18446744072328994710" 为什么??如何将已签名整数打印为未签名整数?@Barmar在评论中给出了答案 您遇到无符号整数溢出 但是,由于不同体系结构的整数大小可能有所不同

简单脚本,PHP5.3.13,Windows8,x32

<?php var_dump(sprintf('%u', -1380556906));
它给了我正确的结果

string(10) "2914410390" PHP5.4.11、FreeBSD9.1、x64也提供了同样的功能

string(20) "18446744072328994710"
为什么??如何将已签名整数打印为未签名整数?

@Barmar在评论中给出了答案

您遇到无符号整数溢出


但是,由于不同体系结构的整数大小可能有所不同。

在Arch Linux x64上的php v5.5.6上打印string20 18446744072328994710。参考:。我想知道为什么行为会改变5.2.3->5.2.4,也许会有一些启示。有趣的反正是给我的这看起来像一个未签名的数字,有什么问题吗?在64位体系结构上,无符号整数更大。从-开始,整数的大小取决于平台,尽管最大值约为20亿是通常的32位有符号值。64位平台的最大值通常约为9E18。PHP不支持无符号整数;这项工作对我来说很好。我理解这一点,我认为第一个架构是x64。我只是想知道如何在x64中从-1380556906获得2914410390,但我已经找到了答案