Форум: "Начинающим";
Текущий архив: 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