Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2018.06.10;
Скачать: [xml.tar.bz2];

Вниз

Перевёртывание бит в байте   Найти похожие ветки 

 
Sergey   (2016-06-22 20:02) [0]

Здравствуйте. Дано: числа в десятеричной системе счисления
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. Но она не работает правильно. Подскажите, есть ли встроенные функции. Или нужно переписывать ручками?


 
iop ©   (2016-06-22 20:14) [1]

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

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

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


 
SergP ©   (2016-06-22 20:59) [2]

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

> 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


 
Sergey   (2016-06-22 22:57) [3]

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


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

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


 
Manaka ©   (2016-06-30 15:53) [5]


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


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


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

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

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


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

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

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

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


 
Rouse_ ©   (2016-06-30 18:27) [8]

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


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

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


 
Rouse_ ©   (2016-06-30 20:19) [10]

:)


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

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

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


 
Rouse_ ©   (2016-06-30 22:09) [12]


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

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


 
dmk ©   (2016-06-30 22:33) [13]

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


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

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


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

> 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:52) [16]

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


 
Германн ©   (2016-07-01 00:16) [17]


> я уже не говорю, что надо сначала найти трехбитные байты
> Rouse_ ©   (30.06.16 18:27) [8]
>
> Трехбитные байты? :) пожалуй украду себе в цитатник :)
>

А что их искать-то? Автор говорит что разбирается с протоколом MODBUS. В его конкретной реализации можно найти байты с любым количеством информационных бит (но не более 8). Более того в этих реализациях можно найти даже "байты с дырками"! :)
Т.е. на примере автора это будет
0-0х0хх0
1-0х0хх1
2-0х1хх0
3-0х1хх1
4-1х0хх0
5-1х0хх1
6-1х1хх0
7-1х1хх1
где х - это биты не несущие никакой информации и могут иметь любое значение (0/1).


 
Германн ©   (2016-07-01 00:24) [18]


> Юрий Зотов ©   (30.06.16 21:53) [11]
>
> Байт - это просто минимально обрабатываемая единица информации.
>

Возражу. Минимальная обрабатываемая единица информации это всё-таки бит!
А то что  некоторые процессоры об этом не знают - это их проблема. :)


 
Юрий Зотов ©   (2016-07-01 00:31) [19]

> Германн ©   (01.07.16 00:24) [18]

> Возражу. Минимальная обрабатываемая единица информации это
> всё-таки бит!
> А то что  некоторые процессоры об этом не знают - это их
> проблема. :)


Если процессор умеет обрабатывать отдельные биты, то это просто означает, что байт у этого процессора состоит из одного бита. Только и всего.


 
Германн ©   (2016-07-01 00:33) [20]

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


 
dfg   (2016-07-01 08:43) [21]

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


 
KilkennyCat ©   (2016-07-01 08:56) [22]

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


 
Юрий Зотов ©   (2016-07-01 09:03) [23]

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


 
KilkennyCat ©   (2016-07-01 09:17) [24]

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


 
dfg   (2016-07-01 09:18) [25]

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


 
dfg   (2016-07-01 09:26) [26]

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


 
Юрий Зотов ©   (2016-07-01 09:30) [27]

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


 
dfg   (2016-07-01 09:35) [28]

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


 
Юрий Зотов ©   (2016-07-01 09:41) [29]

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


 
dfg   (2016-07-01 09:45) [30]

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


 
Юрий Зотов ©   (2016-07-01 10:27) [31]

> KilkennyCat ©   (01.07.16 09:17) [24]

> как и размер у файла.


Костя, у файла нет размера.

1. Какой размер имеют предопределенные файлы SysIn, SysOut, SysErr, COM1? Никакого.

2. Фрагмент программы:
var F: file of byte; ...  AssignFile(F, "C:\MyFile");
Какой размер теперь имеет имеет файл? Никакого.

Ты впал в то самое заблуждение: отождествляешь физический набор данных (у которого размер есть) и логический файл (у которого размера нет).

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


 
qqq   (2016-07-01 10:55) [32]

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


 
ййй   (2016-07-01 12:53) [33]

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


 
SergP ©   (2016-07-01 19:39) [34]


> _Amoeba   (30.06.16 16:39) [6]
>
>
> например
> ror AX,8
> даст обратное расположение битов


Оно даст не обратное расположение битов, а обратное расположение байтов в слове.


 
Kilkennycat ©   (2016-07-01 20:27) [35]


> Юрий Зотов ©   (01.07.16 10:27) [31]

ну, свет тоже то волна, то частица. так и файл, то с размером, то без :)
А собственно, результат работы компьютера вообще нечто непонятное.


 
эээ   (2016-07-01 23:27) [36]

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2018.06.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.002 c
2-1463998221
ford
2016-05-23 13:10
2018.06.10
TWebBrowser , в режиме редактирования, заменить текст выделения


15-1472731971
ВладОшин
2016-09-01 15:12
2018.06.10
бред.. цикл от 0 до -1 как-то зашел в тело


1-1358315680
noob_one
2013-01-16 09:54
2018.06.10
На какое событие устанавливать значение Footer в DBGridEh?


6-1286126664
Сёмсей
2010-10-03 21:24
2018.06.10
Как связать vnc в обход nat proxy


2-1460463897
KSergey
2016-04-12 15:24
2018.06.10
Генерировать функцию во время выполнения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский