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

Не разбирам, код

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

печат

низ (32) "11111111111111111111111111111111" float (4294967295)

но ако получа стойност с помощта на битови операции

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

дадено

низ (32) "11111111111111111111111111111111" int(-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