Битовые операции в ПХП

cDLEON

Онанист РНРСlub
Битовые операции в ПХП

Нужен код для побитового смещения вправо(влево) без знака, подобно как работает в флеше оператор: >>> или <<<
Есть немного инфы по этому вопросу:
Числа с плавающей точкой конвертируются в целые путём отбрасывания значащих цифр справа от точки. Положительные целые числа конвертируются в 16-битное беззнаковое целое число, с максимальным значением 4294967295 или 0xFFFFFFFF; значения большие, чем максимум, отбрасывают лишние значащие цифры до конвертации. Отрицательные целые числа конвертируются в 16-битное беззнаковое целое число, с минимальным значением -2147483648 или 0x800000000; числа имеющие значение меньшие, чем минимум, отбрасывают лишние значащие цифры до конвертации.
 

kruglov

Новичок
для беззнаковых целых чисел побитовое смещение идентично делению-умножению на 2.
 

cDLEON

Онанист РНРСlub
имеется пример на флеше
var x:Number = -1 >>> 1;
trace(x); // выводится: 2147483647

-~{}~ 28.08.05 20:19:

ап =(
 

dvp

Новичок
Re: Битовые операции в ПХП

http://php.rinet.ru/manual/ru/language.operators.bitwise.php

Я так и не понял, к чему ты написал всё это, но вот косяк у тебя заметил:
Автор оригинала: cDLEON
Положительные целые числа конвертируются в 16-битное беззнаковое целое число, с максимальным значением 4294967295 или 0xFFFFFFFF;
максимальное 16 битное беззнаковое число - 0xFFFF
 

Profic

just Profic (PHP5 BetaTeam)
cDLEON
PHP не поддерживает беззнаковые целые
(c) [m]types.integer[/m]
Потому только руками, примерно так:
E:\work\web\SDN\recipe-nddocs\cpp>php
PHP:
<?php
function bitShiftWoutSignExp($num, $count) {
    if ($count > 0) {
        $num >>= 1;
        if ($num & 0x80000000) {
            $num &= 0x7fffffff;
        }
        $num >>= $count - 1;
    } else {
        $num <<= -$count;
    }
    return $num;
}

var_dump(bitShiftWoutSignExp(-1, 1));
?>
^Z
int(2147483647)

E:\work\web\SDN\recipe-nddocs\cpp>
 
Сверху