Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
14 / 14 / 0
Регистрация: 01.12.2017
Сообщений: 577

Битовые операции

29.05.2018, 10:25. Показов 3616. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть арифметическое выражение: y = 13 * ((2 * a + b / 8)). а, b вводятся пользователем.
Как представить это же выражение посредством битовых операций.
Есть такой вариант(работает неверно):
C
1
y = (((((a << 1) + (b >> 3)) << 3) << 2) << 0);
Умножение / деление выполняется сдвигами.
Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.05.2018, 10:25
Ответы с готовыми решениями:

Битовые последовательности и битовые операции
Вычислить сумму по модулю 2 всех бит в позициях, номер которых кратен 2^k. (1, 2, 4, 8, 16, 32). Исходное число содержит 8 байт. ...

Битовые операции, битовые поля.
Здравствуйте! Еслть 4 диапазона чисел: 0-100, 0-100, 0-6000, 0-3. Сделать в виде битовых операций. Записать в unsigned int. Использовать...

Используя только битовые операции и операции арифметического сложения и вычитания, вычислите число
Даны числа x и y. Используя только битовые операции и операции арифметического сложения и вычитания, вычислите число z=(27x+) mod 4. ...

41
Злостный нарушитель
 Аватар для Verevkin
10894 / 5829 / 1289
Регистрация: 12.03.2015
Сообщений: 26,897
31.05.2018, 17:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IchimaruGin Посмотреть сообщение
По каким критериям ты смотришь побитовая операция это или нет)
битовая операция - это логические операция. Я, конечно, могу скопипастить сюда всю статью из википедии, но не вижу смысла.
Операция "суммирование" - это составная операция на основе нескольких логических.

Доклад окончил. Всем спасибо.
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
31.05.2018, 19:49
Verevkin,
Цитата Сообщение от Verevkin Посмотреть сообщение
битовая операция - это логические операция.
а наследование это композиция))
эм, по этому критерию сдвиги не проходят. потому что какая логическая операция передвинет бит в следующую или предыдущую позицию?)
0
Злостный нарушитель
 Аватар для Verevkin
10894 / 5829 / 1289
Регистрация: 12.03.2015
Сообщений: 26,897
31.05.2018, 19:56
Цитата Сообщение от IchimaruGin Посмотреть сообщение
эм, по этому критерию сдвиги не проходят. потому что какая логическая операция передвинет бит в следующую или предыдущую позицию?)
Мне всё равно.
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
31.05.2018, 19:57
да и компилятор приводит все выражения именно в такую форму. потому что деление примерно в 50 раз медленнее а умножение в 10 раз. и того по примеру что в этой теме
скорость первоначальной версии по отношению к моей это
70 к 11.
и если судить про логические операции то все операторы построены на "negative AND gates" так что не катит
0
 Аватар для Praktolock
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
31.05.2018, 20:11
Цитата Сообщение от IchimaruGin Посмотреть сообщение
компилятор приводит все выражения именно в такую форму
Чоооооо?
C++
1
2
3
4
5
6
7
8
int main(int argc, char**argv)
{
    int a=15, b=34;
    int sum=a+b;
    int mul=a*b;
    int div=a/b;
    return sum+mul+div;
}
Миниатюры
Битовые операции  
0
 Аватар для Praktolock
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
31.05.2018, 20:16
Цитата Сообщение от IchimaruGin Посмотреть сообщение
логические операции то все операторы построены на "negative AND gates
только не так что x+y = x|y. Два числа ксорятся, при сбросе в ноль бита рождается бит переноса, который прибавляется к старшему разряду.
Цитата Сообщение от IchimaruGin Посмотреть сообщение
компилятор приводит все выражения именно в такую форму.
Если странная платформа, под которую компилится код, не умеет складывать числа, а умеет только в логические операции, то конпилятор приведет конешно это всё, но это что-то очень экзотическое
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
31.05.2018, 20:31
Praktolock, не всегда компилятор оптимизирует код(ну да насчёт все выражения я переборщил)
0
 Аватар для Praktolock
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
31.05.2018, 20:38
Цитата Сообщение от IchimaruGin Посмотреть сообщение
не всегда компилятор оптимизирует
Да ты про какую-то оптимизацию "наоборот" говоришь. Процессоры и так умеют хардварно складывать, умножать, делить и int и double. А если учесть расширения типа SSE, то даже целые массивы чисел перемножать, безо всяких выражений через логические операторы
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
31.05.2018, 20:38
Цитата Сообщение от Praktolock Посмотреть сообщение
только не так что x+y = x|y. Два числа ксорятся, при сбросе в ноль бита рождается бит переноса, который прибавляется к старшему разряду.
где верхний Exclusive OR
а нижний AND
Миниатюры
Битовые операции  
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
31.05.2018, 20:41
Praktolock, компилятор оптимизирует код поэтому такое и возможно. в исходном коде они int и double а в двоичном виде это просто биты...
0
 Аватар для Praktolock
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
31.05.2018, 20:42
Вот сложение через логические операторы (цикл можно развернуть, насчет числа итераций не уверен)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <conio.h>
 
int main(int argc, char**argv)
{
    int a=34, b=46, c;
    for(int n=0;n<32;n++)
    {
        c=a;
        a=a^b;
        b=(c&b)<<1;
    }
    std::cout << a;
    _getch();
}
Добавлено через 39 секунд
Цитата Сообщение от IchimaruGin Посмотреть сообщение
где верхний Exclusive OR
а нижний AND
всё верно
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
31.05.2018, 20:46
вот полный вариант
Миниатюры
Битовые операции   Битовые операции  
0
 Аватар для Praktolock
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
31.05.2018, 20:48
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Praktolock, компилятор оптимизирует код поэтому такое и возможно. в исходном коде они int и double а в двоичном виде это просто биты...
Компилятор не будет раскладывать простую операцию типа сложения или деления на битовые операции, т.к. процессор делает это хардварно, за 1 такт. 1 КАРЛ!. Если канпилятор сделает это, это будет не оптимизация а деградация.
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
31.05.2018, 20:57
Praktolock, ну хорошо я утверждать не буду кто это делает, так как точно не помню. но суть в том что оно приводится к такой форме что привёл я. (потому что деление побитово намного медленнее за сдвиг и + -, и умножение медленнее)
и процессор не может за один такт провести деление или умножение насколько я помню. может я конечно что то путаю...
можешь привести какую то литературу для подтверждения?
0
 Аватар для Praktolock
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
31.05.2018, 21:12
Цитата Сообщение от IchimaruGin Посмотреть сообщение
суть в том что оно приводится к такой форме что привёл я
На уровне железа - да, на уровне кода - нет
Цитата Сообщение от IchimaruGin Посмотреть сообщение
и процессор не может за один такт провести деление или умножение насколько я помню
Ну на самом деле, процессор не может в принципе ничего сделать за 1 так, но есть хитрая штука, которая зовётся конвейер.
Цитата Сообщение от IchimaruGin Посмотреть сообщение
можешь привести какую то литературу для подтверждения?
Для подтверждения, чтобы точь-в-точь были мои слова где-то написаны, найти трудно. Искать нужно. Просто почитай про архитектуру современных процессоров, АЛУ, конвейер.
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
31.05.2018, 21:19
Praktolock, я начал дискуссию о том что по другому его через побитовые операции не записать(без + и -). возможно я просто не достаточно точно выразился. и по моему за 1 такт сдвиг и + - вроде делается(я не утверждаю, я просто помню что где то что то подобное читал может это не 1 такт а отношение к другим операциям...)
Цитата Сообщение от Praktolock Посмотреть сообщение
Для подтверждения, чтобы точь-в-точь были мои слова где-то написаны, найти трудно. Искать нужно. Просто почитай про архитектуру современных процессоров, АЛУ, конвейер.
да вот я читал давно. может просто что то попутал.
0
 Аватар для Веселый
87 / 88 / 48
Регистрация: 12.10.2013
Сообщений: 1,103
31.05.2018, 22:18
Господа демократы , ответьте несведующему в ваших дебатах.Что сие значит (a<<b)???C++ штурмую недавно.По моим понятиям это оператор битового сдвига !!! Я не прав???
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
31.05.2018, 22:29
Веселый, всё верно
int a = 8; // 0000 1000
a <<= 2; // 0010 0000 ( a = 8 * 2^2 = 32)
1
 Аватар для Веселый
87 / 88 / 48
Регистрация: 12.10.2013
Сообщений: 1,103
31.05.2018, 22:42
Странно,но это не мешает быть ему также выводом в консоль!!!
C++
1
cout>>"ПРИВЕТ ОТ СТАРЫХ КОТЛЕТ!!!";
Добавлено через 3 минуты
Это что ПОЛИМОРФИЗМ ?
0
Злостный нарушитель
 Аватар для Verevkin
10894 / 5829 / 1289
Регистрация: 12.03.2015
Сообщений: 26,897
31.05.2018, 22:44
Цитата Сообщение от Веселый Посмотреть сообщение
Это что ПОЛИМОРФИЗМ ?
Это МАГИЯ!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.05.2018, 22:44

Битовые операции и операции смещения языка С
Доброго времени суток господа,помогите пожалуйста.Есть 2 кода к задаче,первый работает верно(переводит обычные числа в 16-ти ричные),а...

Битовые операции
Здраствуйте, помогите, пожалуйста! Надо написать три функции, используя только битовые (для первых двух) и только битовые и...

Битовые операции
Задача. Я не понимаю что тут делать. Кто то что то понимает? Элементарное я понимаю сдвиги и прочее но это вообще:wall: Умоляю,...

битовые операции
как из 0001 0000 тоесть в dec '8' сделать 0000 0001 в dec '1'?

Битовые операции
Собсно,если используется 4 байтовая переменная,то почему она представлена 16 битами(1010 0110 0010 0110),а не 32 битами?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru