PHP 如何在64位系统让32位的整型左移溢出
答案:1 悬赏:10 手机版
解决时间 2021-12-01 12:07
- 提问者网友:原来太熟悉了会陌生
- 2021-11-30 14:37
PHP 如何在64位系统让32位的整型左移溢出
最佳答案
- 五星知识达人网友:底特律间谍
- 2021-11-30 15:51
可以在64bit系统上把补码处理一下
×手上没装64bit的php所以用Java的64bit的long模拟
public class Test {
public static void main(String[] args) {
int a=83661<<15;
System.out.println("32bit:"+a);
long n=83661L<<15;
System.out.println("64bit:"+n);
if(n>0x7fffffffL){
n--; n=~n; n&=0x7fffffffL; n=-n;
}
System.out.println("64bit处理后:"+n);
}
}32bit:-1553563648
64bit:2741403648
64bit处理后:-1553563648如不想移植以上的,PHP还可以直接把数值pack()打包成32bit有符号,再按32bit有符号unpack()一次也能得到需要的负数,不过感觉这样效率不如以上直接计算快..
×手上没装64bit的php所以用Java的64bit的long模拟
public class Test {
public static void main(String[] args) {
int a=83661<<15;
System.out.println("32bit:"+a);
long n=83661L<<15;
System.out.println("64bit:"+n);
if(n>0x7fffffffL){
n--; n=~n; n&=0x7fffffffL; n=-n;
}
System.out.println("64bit处理后:"+n);
}
}32bit:-1553563648
64bit:2741403648
64bit处理后:-1553563648如不想移植以上的,PHP还可以直接把数值pack()打包成32bit有符号,再按32bit有符号unpack()一次也能得到需要的负数,不过感觉这样效率不如以上直接计算快..
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯