LinuxForum.Fans
Тема

Вопрос о побитовых логических операциях: теория

Автор: hardorsoft 73 сообщений 11055 просмотров
#146299
Fat-Zer написал:
а на это как раз есть оговорка про неэффективный способ

ну в рамках Си - да, тупик.
но на ассемблере x86 можно, BTS. вроде даже какие-то макросы были... где-то в bits.h...

#146308
drBatty написал:
ну в рамках Си - да, тупик.
но на ассемблере x86 можно, BTS. вроде даже какие-то макросы были... где-то в bits.h...

BTS - пересылает бит в CF и установка его в 1. Используется как машинный test&set
вы наверное имели в виду ROL (циклический сдвиг)
bits.h - а это что за хедр?

#146317
Fat-Zer написал:
bits.h - а это что за хедр?

да не помню я. не нужно это всё на практике в 21ом веке :P

#146326
drBatty написал:
BSF/BSR точнее

не понимаю ход ваших мыслей... написано же это чтобы найти первый/последний единичный бит... оно тут причём?

#146355
Fat-Zer написал:
не понимаю ход ваших мыслей...

лень объяснять.

#146915

hardorsoft,
возвращаясь к теме топика, Вы модифицированную задачку решили?

#146982
Fat-Zer написал:
написано же это чтобы найти первый/последний единичный бит... оно тут причём?

1) есть число x
2) x &= (MASK = 00001111100000) (выделяем нужные биты)
3) MASK |= MASK + 100000 (что-бы сбросить все биты в маске, и установить нужный бит)
4) мы знаем, сколько нулей справа, но не знаем, сколько слева. BSF как раз и ищет это число в MASK из п3.

Но обычно проще в начале программы посчитать, сколько бит в типе. Ну или даже на этапе компиляции...

#147162
drBatty написал:
1) есть число x
2) x &= (MASK = 00001111100000) (выделяем нужные биты)
3) MASK |= MASK + 100000 (что-бы сбросить все биты в маске, и установить нужный бит)
4) мы знаем, сколько нулей справа, но не знаем, сколько слева. BSF как раз и ищет это число в MASK из п3.

доктор, а вы всегда удаляете гланды через анус? :o

drBatty написал:
Но обычно проще в начале программы посчитать, сколько бит в типе. Ну или даже на этапе компиляции...

согласен...

#149634
Fat-Zer написал:
доктор, а вы всегда удаляете гланды через анус?

не приходилось. но видел последствия.

#164903
bormant написал:
решение модифицированной задачи
Вопрос о побитовых логических операциях: теория #162610
забросили окончательно, осмелюсь спросить?

1) просто взять, и записать требуемое. Что там? "Взять n бит с позиции p"? Отсчёт слева-направо?

Легко:
mask = 1;
mask <<= n; // делаем маску.
mask--; // маска, это n бит в самой левой позиции (11111100000000000000 для шестёрки)
data <<= p; // двигаем данные так, что-бы позиция p была самой левой. Например, если нам нужно всё с 17го бита (p == 16), то двигаем влево на 16.
data &= mask; // обнуляем ненужные правые биты, используя маску.

2) заворачиваем это всё в однострок, что-бы все увидели нашу крутизну.

#164904

и да, маску я чутка не доделал. её ещё влево сдвинуть надо. Но это уже сами.

Войдите или зарегистрируйтесь, чтобы ответить.