PHP, побитовые операции

Я не понимаю, код

var_dump(decbin(0xFFFFFFFF), 0xFFFFFFFF);

Распечатать

string(32) "11111111111111111111111111111111" float(4294967295)

но если я получу значение с помощью побитовых операций

$shift = 32;
$mask = ~((1 << (32 - $shift)) - 1);
var_dump(decbin($mask), $mask)

данный

строка(32) "11111111111111111111111111111111" целое число(-1)

Как я могу получить 4294967295?


person Hett    schedule 05.03.2014    source источник


Ответы (1)


PHP не поддерживает целые числа без знака, и вполне вероятно, что у вас есть 32-битное целое число со знаком, которое равно -1 для всех установленных битов.

См. http://www.php.net/manual/en/language.types.integer.php

Тем не менее, вы все равно сможете распечатать его, используя printf('%u')

http://us2.php.net/manual/en/function.sprintf.php

person Daniel    schedule 05.03.2014