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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюк операции "<<" в 4.3.8 ? 
:(
    Опции темы
xaoc2
Дата 30.10.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Недавно в институте получил задание. Нарисовать блок-схему алгоритма конверсии десятичных цифр в бинарные. Обычно я прогоняю такие задания на PHP для экономии времени. Придумал алгоритм с операцией сдвига , но вывод - сюрприз для меня.
Здесь decbin() для контроля
Код

<?php

$a = 89898;

echo decbin($a) . "<br>";

for($i=0;$i<32;$i++){
  $b = $a << $i;
  echo $b >> 31;

}
?>


Вот вывод:
10101111100101010
000000000000000-10-10-1-1-1-1-100-10-10-10

Откуда чёрточки? Без них вроде бы всё сходится.

PM MAIL   Вверх
Mal Hack
Дата 30.10.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Мож просто выводятся перед 1 именно.

PM ICQ   Вверх
xaoc2
Дата 30.10.2005, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Mal @ 30.10.2005, 13:36)
Мож просто выводятся перед 1 именно.

Но ведь не должно по определению. При битовом сдвиге может быть 1 или 0.

PM MAIL   Вверх
Mayk
Дата 30.10.2005, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

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



Цитата(Mal @ 30.10.2005, 17:36)
$b >> 31;

При побитовом сдвигании знаковый бит не меняется в данном случае.


Добавлено @ 22:14
То есть $b >> 31 вернет либо 0, либо -1.
Иными словами $b >> 31 заполняет все битиы знаковым.
хотя бы echo abs($b >> 31); спасёт мир smile
Добавлено @ 22:19
а если серьезно, то хотя бы
Код

for($i=0;$i<32;$i++){
  $b = ($a >> (31-$i)) & 1;
  echo $b;
}

Добавлено @ 22:22
или вообще разверни цикл
Код

for($i=31;$i>=0;$i--){
  echo ($a >> $i) & 1;
}


Это сообщение отредактировал(а) Mayk - 30.10.2005, 22:22


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
xaoc2
Дата 31.10.2005, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Большое спасибо, попутно неожиданно нашёл решение дркгой проблемы:
как прочитать произвольный бит числа.
Код

<?php
$a = 15689;
$bitKotoryjHotimProchitat = 4;

echo decbin($a)."<br>";
echo "Читаем бит номер" . $bitKotoryjHotimProchitat . "<br>";
echo ($a >> ($bitKotoryjHotimProchitat-1)&1);

?>

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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