如何扭转此操作?

时间:2010-05-14 21:05:44

标签: php programming-languages

<?php

echo (2884284 >> 16), '<br>'; // = 44

echo ((2884284 >> 16) & 0xFFFF), '<br>'; // 44

从上面我得到44

那我怎么能从44回到2884284 ???

2 个答案:

答案 0 :(得分:9)

你不能。你正在通过转移来破坏数据。

答案 1 :(得分:3)

扩展mhughes回答:

二进制的

2884284是:

1011000000001010111100

当你向右移动时,右边的位被切掉,左边的位用0填充。所以2884284 >> 16变为:

0000000000000000101100

...正如你所提到的那样,44。注意这与除以2 ^ 16并向下舍入相同。反向操作为<<,或向左移位。它会切断左侧的位,并将右侧的位填充为零。但44 << 16是:

1011000000000000000000

...也就是说,你从截断的位中丢失了数据。这个数字是2883584,也许足够接近。请注意,这与乘以2 ^ 16相同。