|
|
|||||||||||
Битовые операции18.07.2013, 11:18. Показов 2462. Ответов 28
Метки нет (Все метки)
Всем привет! Помогите решить интересную задачу! Нужно ниже указный код переписать без условных операторов используя только битовые операции т.е & | ^ ~ << >>. Дополнительных переменных добавлять нельзя, так же нельзя использовать массивы.
0
|
|||||||||||
| 18.07.2013, 11:18 | |
|
Ответы с готовыми решениями:
28
Битовые операции и операции смещения языка С
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
| 18.07.2013, 14:42 | |
|
Можно ли использовать циклы?
![]() Я остановился на том, что нужно использовать выражение типа (~(~a & v) & r1 ) которое даст нам result1, если a и value1 равны. В противном случае оно нам даст разницу меж всеми тремя. И как-то надо прикрутить к нему вторую часть, исключающую эту разницу и, при этом, добавляющую result2, если значения условия не равны. Просто мысль. Сочинить запись я не смог.
1
|
|
|
|
||||||
| 18.07.2013, 18:10 [ТС] | ||||||
|
Нет циклов не должно быть! Вообще необходимо реализовать более быструю альтернативы условным операторам if и else if и else
Добавлено через 2 часа 36 минут Вот реализовал что говаривал Thinker!
0
|
||||||
|
|
|
| 18.07.2013, 18:20 | |
|
Что-то мне кажется, что тут излишне сложные решения:
C #include <stdio.h> /* Оригинальная функция (для проверки) */ int func1 (int a, int value1, int result1, int result2) { int b; if (a == value1) b = result1; else b = result2; return b; } /* Переписанная функция */ int func2 (int a, int value1, int result1, int result2) { int b; /* Операция !x в Си всегда будет возвращать либо 1 (если x == 0), * либо 0 (если x !=0 ). Такой операцией мы легко вычислим признак, * равны между собой две переменные, или нет */ int is_equal = ! (a - value1); /* А если на основании признака нужно вернуть первое или второе * значение, то это делается обычным взвешенным выражением, * коэффициэнты которого будут либо (1, 0), либо (0, 1) */ b = is_equal * result1 + (1 - is_equal) * result2; return b; } int main (void) { printf ("%d\n", func1 (5, 6, -1, 2)); printf ("%d\n", func1 (5, 5, -1, 2)); printf ("%d\n", func2 (5, 6, -1, 2)); printf ("%d\n", func2 (5, 5, -1, 2)); return 0; } Ой я дятел.... условие невнимательно прочитал
1
|
|
|
|
|||||||
| 18.07.2013, 18:50 | |||||||
1
|
|||||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
|
||||||||||||||||||
| 18.07.2013, 19:24 | ||||||||||||||||||
|
вот решил для байта если размерность числа разная то без цикла не обойтись(по моему)
Добавлено через 4 минуты поскольку ветвления нет вот так будет гораздо проще
или даже так
сдвиг вправо для знаковых и беззнаковых отличается али забыл
2
|
||||||||||||||||||
|
|
|
| 18.07.2013, 19:30 | |
|
ValeryS, сдвиг отличается в одном случае:
сдвиг вправо отрицательного числа. Только причем тут это? алгоритм работает для любых чисел (со знаком и без), все учтено ![]() у нас в c либо 0, либо 1. нам либо 0...0 надо получить, либо 1...1.
1
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
|
|||||
| 18.07.2013, 19:35 | |||||
|
вот у тебя но у меня сдвиг во второй строчке проще загоняем все биты в старший в результате получаем или 0 или -128 (0x80) потом разом сдвигаем на семь и получаем или 0 или -1(0xFF) а в остальном параллельно думаем
2
|
|||||
| 18.07.2013, 19:42 | |
|
Не по теме: понял твой трюк, молодец :good:
1
|
|
| 18.07.2013, 19:42 | |
|
Битовые операции Битовые операции Битовые операции Битовые операции Битовые операции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|