[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Действие с переменой и бинарным числом
valik3210
Есть $a = 111000 (бинарное число) Как в $b записать следующее. Читаем число справа налево до 1-й единицы и записываем число. В данном случае "1000". Затем в $c читаем справа налево до 2-й единицы, но при этом первую единицы заменяем на "0" в данном примере получается "10000" и т.д. каждый раз создавая новую переменную до последней единицы? Надеюсь вопрос ясен. smile.gif



Спустя 14 минут, 40 секунд (13.04.2010 - 12:46) sergeiss написал(а):
А что значит $a - бинарное число? Что реально там записано? Десятичное число 111000, которое мы рассматриваем как двоичное, или как-то по-другому?

Спустя 8 минут, 12 секунд (13.04.2010 - 12:54) valik3210 написал(а):
В $a будет записано именно бинарное 111000 т.е 28 с $a= bindec(28);

Спустя 20 минут, 58 секунд (13.04.2010 - 13:15) DedMorozzz написал(а):
$a=1110100;
preg_match ("#^.+(10+)$#",$a,$b);
echo $b[1]."<br><br>";//100
$c=substr_replace($a, '', -strlen($b[1]));
echo $c;//1110

в цикл сам вставляй и переменые пообзывай соотвц, что бы сами генерились.

Спустя 7 минут, 53 секунды (13.04.2010 - 13:23) sergeiss написал(а):
Я бы преобразовал это число в строку с двоичным представлением (sprintf), после чего преобразовал бы строку в массив (str_split) - это делается всё в одну строку. После чего работал бы с массивом.

Спустя 11 минут, 33 секунды (13.04.2010 - 13:34) DedMorozzz написал(а):
и разве будет эт лучше? С массивом придёться делать 2 мильйона проверок и в цикле форича...

Спустя 34 минуты, 44 секунды (13.04.2010 - 14:09) sergeiss написал(а):
А на самом деле, и массивы, и регулярки - изврат полный smile.gif Чегой-то я не сразу сообразил... Человеку же надо просто получить, какие биты в целом числе равны 1, а какие 0.

Делать это надо специальными операторами, работать будет очень быстро.

Вот "для затравки" код (он рабочий, но для реальных целей надо его "доводить до ума"):

$a=28;
for( $i=1; $i<100; $i *= 2 )
echo ($a & $i).'<br>';

Спустя 1 час, 55 минут, 12 секунд (13.04.2010 - 16:04) valik3210 написал(а):
Я думал что с помощью ваших ответов смогу решить свою проблему, которую я изначально не написал (зря). Не осуждайте, но вот в чем задача.

Имеется ряд чисел 2, 4, 8, 16 и т.д ( геометрическая прогрессия со знаменателем прогрессии 2).
$a = 28; (4+8+16)
$b = 12; (4+8)
$c = 6; (2+4)



"Приходит" число 28 ("приходящие" числа всегда сумма из данного ряда). Надо вывести это число и число, сумма которого входит в сумму "пришедшего" . В данном примере ответ будет 28 и 12.

Спустя 4 минуты, 24 секунды (13.04.2010 - 16:08) DedMorozzz написал(а):
Те не кажеться, что это уже ТЗ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.