我在本地测试(php版本是5.3),得到得结果是:1073741824,这是正确结果。代码如下:
<?
$temp = 1;
$right = ($temp << -2);
echo $right;
?>大家知道是咋回事么?

解决方案 »

  1.   

    1 << -2
    其实向右移动了两位
    1111111111111111(16)
    11111111111111111111111111111111(32)
    注意有无符号
      

  2.   

    有符号别算
    ======
    怎么说?
    1 << -2
    其实向右移动了两位
    1111111111111111(16)
    11111111111111111111111111111111(32)
    注意有无符号
    ==========
    php新手,能提供更多信息么?
      

  3.   

    说下我应用得场景吧。
    我是从网上找到一个des算法,其中有如下代码: $right ^= ($temp << -16);
    发现左移正数没问题,左移负数有问题,按照 kyzy_yy_pm 和 freeman 的建议,能否把代码替换下?
      

  4.   

    1 << 2   <=>向左移2位,右边补0,100 即4;
    1<< -2   <=> 1>>2  右移2位 在最高位前补0,由(111111111111111)1变成001111111111111
    记得以前老师是这么教的