Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Побитовые операции в PHP, в ставнении с javascript 
:(
    Опции темы
Jema
Дата 14.1.2010, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 11.12.2003

Репутация: нет
Всего: нет



Ребята - уже два часа мучаю поиск и читаю битовую арифметику. Не могу разобраться - спасайте.
Переписываю пару функций с javascript в PHP и застопорился.
В javascript есть следующие операторы:
Код

Левый сдвиг    a << b    Сдвигает двоичное представление a на b битов влева, добавляя справа нули.
Правый сдвиг, переносящий знак    a >> b    Сдвигает двоичное представление a на b битов вправо, отбрасывая сдвигаемые биты.
Правый сдвиг с заполнением нулями    a >>> b    Сдвигает двоичное представление a на b битов вправо, отбрасывая сдвигаемые биты и добавляя нули слева.

В PHP есть следующие аналоги:
Код

$a << $b    Сдвиг влево     Все биты переменной $a сдвигаються на $b позиций влево (каждая позиция подразумевает 'умножение на 2')
$a >> $b    Сдвиг вправо     Все биты переменной $a сдвигаються на $b позиций вправо (каждая позиция подразумевает 'деление на 2')

Оператор >>> в PHP мною не обнаружен.
Справедлива ли замена >>>  на abs($a >> $b) в  PHP?
PM MAIL   Вверх
Simpliest
Дата 15.1.2010, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3



Цитата(Jema @  14.1.2010,  22:21 Найти цитируемый пост)
Правый сдвиг, переносящий знак    a >> b    Сдвигает двоичное представление a на b битов вправо, отбрасывая сдвигаемые биты.
Правый сдвиг с заполнением нулями    a >>> b    Сдвигает двоичное представление a на b битов вправо, отбрасывая сдвигаемые биты и добавляя нули слева.

Я откровенно говоря не уловил разницы между этими двумя операциями.

В первом случае разве не нули слева появляются?

В смысле что 01001 >> 1 =  00100 и это эквивалентно 1001 >> 1 = 100

Или где-то в языках высокого уровня учитывается битовая разрядность чисел? и 00100 != 100 ? В честь чего?

Добавлено через 1 минуту и 7 секунд
Аааа. жесть
Цитата
a >> b Арифметический сдвиг вправо Сдвигает двоичное представление левого операнда вправо на количество бит, заданное вторым операндом. Освобождающиеся слева биты заполняются старшим (знаковым) битом. a >>> b Логический сдвиг вправо Сдвигает двоичное представление левого операнда вправо на количество бит, заданное вторым операндом. Освобождающиеся слева биты заполняются нулями. 

Как говориться читайте ПРАВИЛЬНЫЕ мануалы.

Добавлено через 1 минуту и 38 секунд
http://wdh.suncloud.ru/js04.htm

Добавлено через 10 минут и 8 секунд
А вот что говориться в PHP
Цитата

$a >> $b  Shift right Shift the bits of $a $b steps to the right (each step means "divide by two")  

Bit shifting in PHP is arithmetic. Bits shifted off either end are discarded. Left shifts have zeros shifted in on the right while the sign bit is shifted out on the left, meaning the sign of an operand is not preserved. Right shifts have copies of the sign bit shifted in on the left, meaning the sign of an operand is preserved. 


Цитата(Jema @  14.1.2010,  22:21 Найти цитируемый пост)
Справедлива ли замена >>>  на abs($a >> $b) в  PHP? 

да


--------------------
user posted image
PM   Вверх
Jema
Дата 15.1.2010, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 11.12.2003

Репутация: нет
Всего: нет



спасибо
проверяю как-раз
PM MAIL   Вверх
Simpliest
Дата 15.1.2010, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3



проверять легко

Код

$a = -1*PHP_INT_MAX

var_dump(decbin($a));
for ($b = 1;$b <33; $b++) {
    var_dump(decbin(abs($a >> $b)));
}



--------------------
user posted image
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0868 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.