Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый Вчера, 17:39   #1
Iskatel S
Пользователь
 
Регистрация: 16.06.2012
Сообщений: 34
По умолчанию Побитовый разбор числа.

Допустим на вход программы пришла такая строка - '0x00883000', да именно строка.
Тут записано число в шестнадцатеричном коде, что в двоичном будет соответствовать 00000000100010000011000000000000, то есть в 1 установлены биты под номерами: 12, 13, 19 и 23. За каждым битом закреплена своя строка сообщения, нужно вывести эти строки.
С чего начитать? С преобразования строки в число, вернее сначала в десятичное число с помощью base_convert() или как бы вы решали задачу?
Iskatel S вне форума Ответить с цитированием
Старый Вчера, 18:56   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,645
По умолчанию

Сразу в двоичный формат переводите:

Код:
<?php

$hex = '0x00883000';
$bin = base_convert($hex, 16, 2);
$bin = str_pad($bin, 32, '0', STR_PAD_LEFT);

echo $bin;
Дальше можно строку посимвольно перебрать.

Или можно перевести в десятичную системы счисления, а биты перебирать посредством нахождения остатка от деления 2 и целочисленным делением на 2.
Arigato на форуме Ответить с цитированием
Старый Вчера, 20:53   #3
Iskatel S
Пользователь
 
Регистрация: 16.06.2012
Сообщений: 34
По умолчанию

Arigato, то есть мне лучше работать со строками и в integer не переводить? Есть ведь вариант перевести в integer, а затем применять поразрядные операции или это сложнее выйдет?
Iskatel S вне форума Ответить с цитированием
Старый Вчера, 23:04   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,645
По умолчанию

Как нравится, так и сделайте. Большой разницы нет.
Arigato на форуме Ответить с цитированием
Старый Сегодня, 03:50   #5
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,829
По умолчанию

Цитата:
Сообщение от Iskatel S Посмотреть сообщение
Есть ведь вариант перевести в integer, а затем применять поразрядные операции или это сложнее выйдет?
Это PHP, он на строки заточен, числа в нем сильно факультативны. При переводе в строку работает сишный код встроенной функции, а битовые операции идут через сам интерпрератор PHP (хотя в нем теперь и JIT, но всё же). Так что да, по всей видимости. Можно заморочиться, конечно, и соревнования с секундомером устроить, но оно вам надо?

Кстати, а битовые операции вообще есть в PHP? Что-то на память не помню. Недавно завезли?
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый Сегодня, 10:53   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,645
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Кстати, а битовые операции вообще есть в PHP?
Такие же, как в Си.
Arigato на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Побитовый сдвиг числа Timamas Помощь студентам 4 16.12.2020 11:31
разбор числа СИ Яська Помощь студентам 1 02.04.2011 01:53