![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 28.05.2013
Сообщений: 7
|
![]()
Здравствуйте! С утра думаю над проблемой... Голова уже болеть начала
![]() Имеется: переменная A (8 байт), переменная B (1 байт), параметр X; Цель: поксорить 8 бит переменной A с переменной B, начиная с произвольного бита, заданного в X; Средства: пишу на PureBasic, требуется подсказать логику, а не код. Возможны инлайн-вставки асма, но т.к. переменная 8 байт, а пишу я под x86, не думаю, что асм чем-то поможет. Хотя, может, я и не прав; Попытки решения: а) A ! ((B << 56)>> X) ; попытка поксорить со сдвинутым значением B. Вроде всё хорошо, до тех пор, пока число не будет начинаться с 1. работает: 00110110 сдвиг влево: 00110110000000000000000000000000000 00000000000000000000000000000 сдвиг на позицию (скажем, x = 10): 00000000000011011000000000000000000 00000000000000000000000000000 косяк: 10110110 сдвиг влево: 10110110000000000000000000000000000 00000000000000000000000000000 сдвиг на позицию (скажем, x = 10): 11111111111011011000000000000000000 00000000000000000000000000000 B объявлена, как беззнаковое слово, если это имеет значение. б) попытка создать маску вида [X нулей][еденицы] для AND'а c результатом, полученным выше, но могу получить только [нули][X едениц]... Переводить NEG'атив [нули][X едениц] в строку для инвертирования (ReplaceString), затем перевода назад в число, затем OR'ить с [нули][X едениц], для последующего AND'а со сдвинутой B, для последующего XOR'а с A считаю нерациональным, думаю, любой уважающий себя программист со мной согласится ![]() Последний раз редактировалось Dartes; 28.05.2013 в 16:59. |
![]() |
![]() |
![]() |
#2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
![]() Это вообще как-то не укладывается в голове с понятием сдвига битов.
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 28.05.2013
Сообщений: 7
|
![]() ![]() Ну вот... Я ещё пробовал вместо сдвига вправо использовать деление на степень двойки, ну по сути это вроде одинаково работает (сдвиг вправо на 3 бита аналогично делению на 2^3)... Результат был тот же, только реализовано страшнее. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 28.05.2013
Сообщений: 7
|
![]()
Аватар, спасибо большое! Сам не нагуглил ((( В голову не стукнуло, что косяк в самом пурике...
...только, как я и говорил, у меня число большое, и как модифицировать асмовский код для процедуры не знаю... Код:
![]() Последний раз редактировалось Dartes; 28.05.2013 в 17:49. |
![]() |
![]() |
![]() |
#6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
А можно еще наверное так:
Если первый бит - 1 то инвертировать. Потом сдвигать и инвертировать обратно. Хотя конечно косяк этот никак не на пользу Бейсику.
I'm learning to live...
|
![]() |
![]() |
![]() |
#7 | |
Регистрация: 28.05.2013
Сообщений: 7
|
![]()
Stilet
Цитата:
Последний раз редактировалось Dartes; 28.05.2013 в 18:45. |
|
![]() |
![]() |
![]() |
#8 |
Регистрация: 28.05.2013
Сообщений: 7
|
![]()
Всем спасибо за участие, всё гениальное - просто
Код:
![]() Последний раз редактировалось Dartes; 28.05.2013 в 20:43. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 15.08.2012
Сообщений: 26
|
![]() |
![]() |
![]() |
![]() |
#10 | |
Регистрация: 28.05.2013
Сообщений: 7
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
шифрование байта | Oleg1988 | Общие вопросы C/C++ | 7 | 31.08.2012 19:41 |
объеденить 2 байта | NEoMASTERR | Общие вопросы Delphi | 1 | 01.05.2012 12:33 |
Инвертирование байта (string vs asm vs xor) | bizkitlimp | Общие вопросы Delphi | 4 | 08.01.2012 23:12 |
Чтение 0 байта | TorrMoZZZZ | Помощь студентам | 0 | 26.09.2010 21:44 |