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

  • Автор темы Автор темы cDLEON
  • Дата начала Дата начала

cDLEON

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

Этот вопрос я уже задавал, но задам ещё раз, вот эта ф-я:
PHP:
function bits($num, $count) 
	{
	if ($count > 0) 
		{ 
	        $num >>= 1; 
	        if ($num & 0x80000000) 
			{ 
			$num &= 0x7fffffff; 
        		} 
        	$num >>= $count - 1; 
		} 
	else 
		{ 
        	$num <<= -$count; 
    		} 
	return $num; 
	}
заменяет, флеш комманду(>>>), для ПХП, но работает не совсем правильно, не всегда результат во флеш, совподает с результатом на ПХП, например при попытке сместиться на 32 бита, ПХП возвращает ноль, а флеш нормальное число, ПОМОГИТЕ работа горит!!!!!
 
Да нет там вроде бы не чего..., мне ф-я реальная нужна =)
 
Re: Битовые операции в ПХП (>>>)

Автор оригинала: cDLEON
например при попытке сместиться на 32 бита, ПХП возвращает ноль, а флеш нормальное число
Интересно... И какое же это ненулевое число может получиться, если двоичное число, имеющее единицу только в младшем разряде, сдвинуть вправо на 32 бита?
 
спроси у флеш разработчиков =), или сам попробуй подставить это всё..., там не обязательно 1-ца быть должна....
ПХП не зависимо какое там число выдаёт ноль...
 
cDLEON, давай подумаем вместе. Пронумеруем разряды справа налево от 0 до 31. При сдвиге вправо на 1 бит значение 0 бита отбрасывается, на его место пишется 1-й, на место 1-го -- второй, на место 2-го -- третий ... на место 30-го -- 31-й, а сам 31-й заполняется нулем. Так?

Вопрос: что будет, если сделать это 32 раза? Возьми листочек и карандаш.
 
млин возьми открой флеш и попробуй сам для меня самого то было смешно....
 
cDLEON, МНЕ твой флэш нахрен не сдался. Тебя интересует решение -- ты и возьми бумажку.

-~{}~ 26.09.05 08:55:

Последняя попытка помочь осознать: у меня описано, как работает твоя функция. >>> отличается от твоей функции тем, что не выбрасывает младший бит, а... А что она с ним делает -- ты узнаешь в документации.

В этом и заключается основная ошибка твоей функции.
 
Хе-хе, функция как раз таки не его, а моя :). Написана по его "описанию" оператора >>>. Видимо описание было кривым :).
 
Profic, описание операторов >> и >>> определенно должно различаться. :) Кстати, а как именно он это описал?
 
Profic, он тебя обманул:

Нужен код для побитового смещения вправо(влево) без знака, подобно как работает в флеше оператор: >>> или <<<
Операторы >>> и <<< -- это битовое ВРАЩЕНИЕ, а не смещение.

Ты действительно написал то, что он попросил. Но это не имеет никакого отношения к тому, что делают <<< и >>> в ECMAscript.
 
Гат (с) :)
Хм. Интересно:
>>> (Zero-Fill Right Shift)
This operator shifts the first operand the specified number of bits to the right. Excess bits shifted off to the right are discarded. Zero bits are shifted in from the left.
(с) JavaScript 1.5 Reference Manual
Причем про <<< вообще ни слова :)
 
Любопытно. Не исключено я ощибаюсь и где-то >>> означает не вращение. Но "zero-filled right shift" на 32 бита в 32-битном числе всегда даст ноль. Без вариантов.
 
Но "zero-filled right shift" на 32 бита в 32-битном числе всегда даст ноль. Без вариантов
Это да.
Но если это сдвиг с переносом, то тогда каким боком в примере из прошлой темы у него из -1 получается 2^31-1? Ничего не понимаю...
 
Сверху