echo 3232238115 % 256; //-221
echo bcmod(3232238115,256);//35
echo fmod(3232238115,256);//35

解决方案 »

  1.   

    应该算是吧,php的取模好像是针对整数的
    看手册,有个人写的大整数取模function my_bcmod( $x, $y ) {
        $take = 5;
        $mod = '';
        do{
            $a = (int)$mod.substr( $x, 0, $take );
            $x = substr( $x, $take );
            $mod = $a % $y;
    echo $a.'-'.$x.'-'.$mod.'<br>';
        }
        while ( strlen($x) ); 
        return (int)$mod; 
    }echo my_bcmod( "7044060001970316212900", 150 );//50/*
    070440-60001970316212900-90
    9060001-970316212900-1
    197031-6212900-81
    8162129-00-29
    2900--50
    */
      

  2.   

    echo 53232238115 % 256; //35
    这与大数有关吗?
      

  3.   

    $num1=intval(3232238115);
    echo $num1."<br>";//-1062729181
    echo $num1 % 256;//-221
    echo "<br>";
    $num2=intval(53232238115);
    echo $num2."<br>";//1692630563
    echo $num2 % 256;//35
    你的数超过了int的范围(-2147483648至2147483647)就会强转
    负数也可以取模
    但是我就不知道为什么强转出来会有负数...
      

  4.   

    你们在什么版本下测试的?我在我的版本下测试是输出 35...PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15) 
    Copyright (c) 1997-2013 The PHP Group
    Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
      

  5.   

    php5.3.6 到 php5.4.20 都存在这个问题
      

  6.   

    php怎么反汇编,这种问题c/c++看一下就知道了
      

  7.   

    %取模应该是用于比较常见的运算吧
    php不是提供了一个高精度的数学运算函数库么,bc系列,估计就是考虑%取模的缺点