|
|
|||||||||||
Битовые операции18.07.2013, 11:18. Показов 2164. Ответов 28
Метки нет (Все метки)
Всем привет! Помогите решить интересную задачу! Нужно ниже указный код переписать без условных операторов используя только битовые операции т.е & | ^ ~ << >>. Дополнительных переменных добавлять нельзя, так же нельзя использовать массивы.
0
|
|||||||||||
| 18.07.2013, 11:18 | |
|
Ответы с готовыми решениями:
28
Битовые операции и операции смещения языка С
|
|
20 / 20 / 2
Регистрация: 01.05.2012
Сообщений: 61
|
|
| 18.07.2013, 11:27 | |
|
b = (result1 & (a==value1)) || (result2 & (a!=value1))
1
|
|
|
|
||
| 18.07.2013, 11:35 [ТС] | ||
|
Спасибо за вариант но по условию можно использовать только оператор присваивания = и битовые операции & | ^ ~ << >> и все!
Добавлено через 2 минуты Добавлено через 2 минуты Ваше выражение возвращает 0 в случаи истины и 1 в случаи лжи! А должно присвоит b заданное значение value1 в случаи истины и value2 в случаи лжи!
0
|
||
|
|
||
| 18.07.2013, 11:35 | ||
|
считает это выражение всё равно неверно
0
|
||
|
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
|
|
| 18.07.2013, 11:36 | |
|
может a==value1 заменить на !(a^value1)?
0
|
|
|
20 / 20 / 2
Регистрация: 01.05.2012
Сообщений: 61
|
||
| 18.07.2013, 11:38 | ||
|
y = (a==value2)&(0xffff)) || (a==value2)&(0xefff); b = ( result1 & x) || (result2 & y); Добавлено через 1 минуту Хотя да, условные операторы пользовать нельзя
0
|
||
|
|
||
| 18.07.2013, 11:43 [ТС] | ||
|
0
|
||
|
20 / 20 / 2
Регистрация: 01.05.2012
Сообщений: 61
|
|
| 18.07.2013, 11:54 | |
|
x = !(a==value1) || (a==value1);
y = !(a==value2) || (a==value2); b = ( result1 & x) || (result2 & y); Но так-то выполняется! ![]() Остается только ОR через AND и NOT представить и сравнение!
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
| 18.07.2013, 12:10 | |
|
rlib, я что-то проглядел или откуда value2?
0
|
|
|
|
||||||
| 18.07.2013, 14:08 | ||||||
|
лучше поясню в чем будет смыл. Для простоты переобозначу переменные так:
a==b тогда и только тогда, когда ~(a^b) == 1...1 (все n единичек) 1. шаг. Обозначим (временно) A = ~(a^b). Выделим в A все биты: A & 1, (A >> 1) & 1,..., (A >> (n-1)) & 1 и ко всем выделенным битам применим операцию &: AA = (A & 1) & ... & ((A >> (n-1)) & 1) так вот если a==b, то AA == 1, иначе AA == 0. Далее младший бит в AA ставим на все остальные позиции: AAA = (AA & 1) | ((AA & 1) << 1) | ... | ((AA & 1) << (n-1)) получим число 1...1 (число из всех единиц), если a==b, либо 0...0 (если a не равно b). к полученному числу и x применяем &. Половина выражения закончена, результатом которого будет либо x, либо 0. 2. шаг. Пусть B = (a^b) ко всем выделенным битам числа B применим операцию |: BB = (B & 1) | ... | ((B >> (n-1)) & 1) при этом если a==b, то BB == 0, иначе BB == 1. Далее младший бит в BB ставим на все остальные позиции: BBB = (BB & 1) | ((BB & 1) << 1) | ... | ((BB & 1) << (n-1)) получим число 1...1 (число из всех единиц), если a!=b, либо 0...0 (если a==b). к полученному числу и y применяем &. А далее, rezult = AAA & x | BBB & y; вместо A, AA, AAA, BB, BBB можно вставлять выражения (то есть не будет лишних переменных), но выражение будет ОГРОМНЫМ.
2
|
||||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||
| 18.07.2013, 14:13 | ||
|
По сути нам надо всего лишь построить на доступной логике общий алгоритм, превращающий любое число в ноль (или единицу).
1
|
||
| 18.07.2013, 14:13 | |
|
Помогаю со студенческими работами здесь
20
Битовые операции Битовые операции Битовые операции Битовые операции Битовые операции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|