а на это как раз есть оговорка про неэффективный способ
ну в рамках Си - да, тупик.
но на ассемблере x86 можно, BTS. вроде даже какие-то макросы были... где-то в bits.h...
а на это как раз есть оговорка про неэффективный способ
ну в рамках Си - да, тупик.
но на ассемблере x86 можно, BTS. вроде даже какие-то макросы были... где-то в bits.h...
ну в рамках Си - да, тупик.
но на ассемблере x86 можно, BTS. вроде даже какие-то макросы были... где-то в bits.h...
BTS - пересылает бит в CF и установка его в 1. Используется как машинный test&set
вы наверное имели в виду ROL (циклический сдвиг)
bits.h - а это что за хедр?
BTS - пересылает бит в CF и установка его в 1. Используется как машинный test&set
BSF/BSR точнее
http://www.fermi.mn.it/linux/quarta/x86/bsf.htm
bits.h - а это что за хедр?
да не помню я. не нужно это всё на практике в 21ом веке :P
BSF/BSR точнее
не понимаю ход ваших мыслей... написано же это чтобы найти первый/последний единичный бит... оно тут причём?
не понимаю ход ваших мыслей...
лень объяснять.
hardorsoft,
возвращаясь к теме топика, Вы модифицированную задачку решили?
написано же это чтобы найти первый/последний единичный бит... оно тут причём?
1) есть число x
2) x &= (MASK = 00001111100000) (выделяем нужные биты)
3) MASK |= MASK + 100000 (что-бы сбросить все биты в маске, и установить нужный бит)
4) мы знаем, сколько нулей справа, но не знаем, сколько слева. BSF как раз и ищет это число в MASK из п3.
Но обычно проще в начале программы посчитать, сколько бит в типе. Ну или даже на этапе компиляции...
1) есть число x
2) x &= (MASK = 00001111100000) (выделяем нужные биты)
3) MASK |= MASK + 100000 (что-бы сбросить все биты в маске, и установить нужный бит)
4) мы знаем, сколько нулей справа, но не знаем, сколько слева. BSF как раз и ищет это число в MASK из п3.
доктор, а вы всегда удаляете гланды через анус? :o
Но обычно проще в начале программы посчитать, сколько бит в типе. Ну или даже на этапе компиляции...
согласен...
доктор, а вы всегда удаляете гланды через анус?
не приходилось. но видел последствия.
hardorsoft,
решение модифицированной задачи
http://linuxforum.ru/viewtopic.php?pid=162610
забросили окончательно, осмелюсь спросить?
решение модифицированной задачи
Вопрос о побитовых логических операциях: теория #162610
забросили окончательно, осмелюсь спросить?
1) просто взять, и записать требуемое. Что там? "Взять n бит с позиции p"? Отсчёт слева-направо?
Легко:
mask = 1;
mask <<= n; // делаем маску.
mask--; // маска, это n бит в самой левой позиции (11111100000000000000 для шестёрки)
data <<= p; // двигаем данные так, что-бы позиция p была самой левой. Например, если нам нужно всё с 17го бита (p == 16), то двигаем влево на 16.
data &= mask; // обнуляем ненужные правые биты, используя маску.
2) заворачиваем это всё в однострок, что-бы все увидели нашу крутизну.
и да, маску я чутка не доделал. её ещё влево сдвинуть надо. Но это уже сами.