Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перевёртывание бит в байте [D2005, XP]


Страницы:   1 2

Sergey ©   (2016-06-22 20:02:00) 

Здравствуйте. Дано: числа в десятеричной системе счисления
0, 1, 2, 3, 4, 5, 6, 7
По таблице перевода в двоичную систему счисления это будет:
0-000
1-001
2-010
3-011
4-100
5-101
6-110
7-111
Мне нужно как то передвинуть биты, чтобы получились мне нужные биты по такой таблице истинности:
0-000
1-100
2-010
3-110
4-001
5-101
6-011
7-111
Как бы вижу закономерность, нужно сдвигать биты вправо, операцией shr. Но она не работает правильно. Подскажите, есть ли встроенные функции. Или нужно переписывать ручками?


Rouse_   (2016-06-30 23:52:00) [21]

Удалено модератором


Юрий Зотов   (2016-06-30 23:52:00) [22]

> Rouse_ ©   (30.06.16 22:09) [12]

Выступая в роли известного капитана, осмелюсь предложить небольшое эссе на тему "что такое файл".

Простейший пример - переназначение ввода-вывода (в DOS и не только).

Пусть программа Pgm состоит из одного оператора WriteLn('Привет'). Запускаем ее так: Pgm. Вывод идет на экран.

А почему именно на экран? Потому что WriteLn выводит в файл SysOut, а по умолчанию это экран. Так распорядилась OS.

Знает ли программа о том, что ее вывод идет на экран? Нет, не знает. Она гонит вывод в файл SysOut и остальное ее не волнует.

Теперь запускаем ту же программу (без перекомпиляции) так: Pgm > prn. Вывод идет на текстовый принтер (допустим, он есть).

А почему именно на принтер? Потому что при запуске программы файл SysOut был переназначен на другое устройство вывода. OS честно выполнила нашу команду.

Знает ли программа о том, что теперь ее вывод идет на принтер? Нет, не знает. Она по-прежнему гонит вывод в файл SysOut и остальное ее не волнует.

Теперь запускаем ту же программу (без перекомпиляции) так: Pgm > aus.
Вывод идет на какое-то электронное табло где-то в Австралии (допустим, оно тоже есть).

А программа по-прежнему гонит вывод в файл SysOut и ни о какой Австралии ничего не знает.

Аналогично сработает и такой запуск: Pgm > C:\Hello.txt. Вывод будет записан в набор данных на диске, а программа снова будет знать только SysOut и ничего больше.

Что получается? То, что понятие "файл" (тот, который SysOut) - это понятие чисто логическое. Физически же один и тот же файл может быть ассоциирован с любым набором данных на любом устройстве (конечно, подходящем по типу и способу доступа).

Файл - это поименованная совокупность данных с определенной структурой. И все. Никаких экранов, принтеров, дисков и прочих железяк.

Железяку можно увидеть. Или пощупать. Файл ни увидеть, ни пощупать нельзя. Потому что его не существует.


Rouse_   (2016-06-30 23:47:00) [23]

И даже пятибитный байт? :)


dmk   (2016-06-30 22:33:00) [24]

Да поможет вам pshufb.
Ну или тут чего нароете. Пшуфбом можно биты как угодно ставить.
Тут много всего почитать: http://programming.sirrida.de/bit_perm.html


Rouse_   (2016-06-30 22:09:00) [25]


> Юрий Зотов ©   (30.06.16 21:53) [11]
> Другое распространенное заблуждение - дисковый файл. На
> самом деле, файл - это чисто логическое понятие. В природе
> не существует - ни на дисках, ни где-либо еще.

Дядь Юра знает толк в тонкостях :) Хардлинки наше все, особенно когда их два и более :)


Юрий Зотов   (2016-06-30 21:53:00) [26]

Байт - это просто минимально обрабатываемая единица информации. Поэтому машинно-зависим и может содержать любое количество бит.

Другое распространенное заблуждение - дисковый файл. На самом деле, файл - это чисто логическое понятие. В природе не существует - ни на дисках, ни где-либо еще.


Rouse_   (2016-06-30 20:19:00) [27]

:)


dfg   (2016-06-30 20:11:00) [28]

пятибитный байт
https://ru.wikipedia.org/wiki/%D0%9C%D0%A2%D0%9A-2


Rouse_   (2016-06-30 18:27:00) [29]

Трехбитные байты? :) пожалуй украду себе в цитатник :)


dfg   (2016-06-30 16:46:00) [30]

с фига ли даст обратное-то?

если например вращаем влево,
то выталкиваемый бит, стоящий ближе к левому краю байта
после вращения окажется левее всех прокрученных бит, которые были правее его до вращения.

я уже не говорю, что надо сначала найти трехбитные байты


_Amoeba   (2016-06-30 16:39:00) [31]

Есть ассемблерные команды циклическогосдвига битов в байте - ROR и ROL

например
ror AX,8
даст обратное расположение битов


Manaka   (2016-06-30 15:53:00) [32]


> Мне нужно как то передвинуть биты


не надо двигать, надо перевернуть "наоборот"


Германн   (2016-06-23 02:07:00) [33]

Удалено модератором
Примечание: Создание пустых сообщений


Sergey   (2016-06-22 22:57:00) [34]

Разбираюсь типом данных Boolean в протоколе ModBus. Зачем деды в 1979 году так делали, неизвестно. Чёто шифровали всё, мода была наверное такая...
Да, парни, спасибо огромное. Оба варианта верны, оба попробовал. Да, действительно, зеркальное отображение байт. Спасибо что существует подобный ресурс и люди его населяющие. Спасибо iop и SergP


SergP   (2016-06-22 20:59:00) [35]

Для данного конкретного случая, лучший вариант

> iop ©   (22.06.16 20:14) [1]
>
> никакие шифты здесь не нужны, нужен тупейший список индекисрованный
> неперевернутыми десятичными 0-7 в котором лежат готовые
> перекрученные числа
>


Для чисел длинной до 32 бит можно так написать:

function Mirror(source,bitcount:integer):integer;
asm
      xor ecx,ecx
@next: rcr eax,1
      rcl ecx,1
      dec edx
      jnz @next
      mov eax,ecx
end;


bitcount - разрядность числа, которое нужно перевернуть, для сабжевого случая оно равно 3


iop   (2016-06-22 20:14:00) [36]

Как бы вижу закономерность, нужно сдвигать биты вправо,

ну как бы видишь ты не все
старшие нечетные - вправо
а младшие нечетные  - влево.

никакие шифты здесь не нужны, нужен тупейший список индекисрованный неперевернутыми десятичными 0-7 в котором лежат готовые перекрученные числа


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо