<?php
echo (2884284 >> 16), '<br>'; // = 44
echo ((2884284 >> 16) & 0xFFFF), '<br>'; // 44
从上面我得到44
那我怎么能从44回到2884284 ???
答案 0 :(得分:9)
答案 1 :(得分:3)
扩展mhughes回答:
二进制的2884284是:
1011000000001010111100
当你向右移动时,右边的位被切掉,左边的位用0填充。所以2884284 >> 16
变为:
0000000000000000101100
...正如你所提到的那样,44。注意这与除以2 ^ 16并向下舍入相同。反向操作为<<
,或向左移位。它会切断左侧的位,并将右侧的位填充为零。但44 << 16
是:
1011000000000000000000
...也就是说,你从截断的位中丢失了数据。这个数字是2883584,也许足够接近。请注意,这与乘以2 ^ 16相同。