14 / 14 / 0
Регистрация: 01.12.2017
Сообщений: 577
1

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

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

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

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

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

Используя только битовые операции и операции арифметического сложения и вычитания, вычислите число
Даны числа x и y. Используя только битовые операции и операции арифметического сложения и...

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

41
12 / 12 / 13
Регистрация: 18.05.2018
Сообщений: 67
29.05.2018, 11:29 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
 
using std::cout;
using std::endl;
using std::cin;
 
int main(void)
{
    long long num[2] = {};
 
    setlocale(LC_ALL, "rus");
 
    for(int i = 0; i < 2; i++)
    {
        cout << "Введите " 
             << (i == 0 ? "первое" : "второе")
             << " "
             << "число :";
        cin >> num[i];
    }
 
    cout << "Ответ :"
         << 13*((num[0] << 1) + (num[1] >> 3))
         << endl;
 
    return 0;
}
Сдвиг битов влево эквалентентен возведению сдвигаемого число в 2^n.
Сдвиг битов вправо эквалентентен делению сдвигаемого число на 2^n
n - количество сдвигаемых битов.
0
Злостный нарушитель
9448 / 5099 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
29.05.2018, 13:24 3
ну...

Битовые операции
3
14 / 14 / 0
Регистрация: 01.12.2017
Сообщений: 577
29.05.2018, 15:04  [ТС] 4
13 тоже нужно представить в битовом виде, что я и сделал. Но в чем проблема?
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
29.05.2018, 16:28 5
если b нацело делится на 8 то

13 * ((2 * a + b / 8) == (a << 5) + (b << 1) - (a << 3) - (b >> 1) + (a << 1) + (b >> 3)
0
Злостный нарушитель
9448 / 5099 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
29.05.2018, 17:31 6
Чо, вариант, нарисованный на гараже, не подошёл?
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
29.05.2018, 17:42 7
Лучший ответ Сообщение было отмечено Teylor как решение

Решение

чёт я просчитался первый раз
вот правильно для любых а и b (вроде бы)
13 * ((2 * a + b / 8) == (a << 5) - (a << 2) - (a << 1) + (b << 1) - (b >> 2) - (b >> 3)
0
14 / 14 / 0
Регистрация: 01.12.2017
Сообщений: 577
29.05.2018, 18:07  [ТС] 8
Verevkin, в чем прикол гаража?
0
Злостный нарушитель
9448 / 5099 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
29.05.2018, 18:28 9
Цитата Сообщение от Teylor Посмотреть сообщение
в чем прикол гаража?
Никаких приколов. Что-то не так?
0
14 / 14 / 0
Регистрация: 01.12.2017
Сообщений: 577
30.05.2018, 01:35  [ТС] 10
Verevkin, здесь какой-то острый сарказм, но я его не уловил. К сожалению
0
Злостный нарушитель
9448 / 5099 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
30.05.2018, 08:53 11
Цитата Сообщение от Teylor Посмотреть сообщение
здесь какой-то острый сарказм, но я его не уловил. К сожалению
да нет тут никакого сарказма. Чо за СПГС?
0
14 / 14 / 0
Регистрация: 01.12.2017
Сообщений: 577
30.05.2018, 08:55  [ТС] 12
Verevkin, тогда к чему гараж?
0
Злостный нарушитель
9448 / 5099 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
30.05.2018, 09:02 13
Цитата Сообщение от Teylor Посмотреть сообщение
тогда к чему гараж?
прост.
----------
код-то работает, или уже и пофигу?
0
12 / 12 / 13
Регистрация: 18.05.2018
Сообщений: 67
30.05.2018, 17:55 14
Твоя задача очень оказалась интересной. Я думал, что число 13 будет проблемой при её решении, но если поиграть с битами, то всё получается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
using std::cout;
using std::endl;
using std::cin;
 
int main(void)
{
    long long a(0);
    long long num[2] = {};
 
    setlocale(LC_ALL, "rus");
 
    for(int i = 0; i < 2; i++)
    {
        cout << "Введите " 
             << (i == 0 ? "первое" : "второе")
             << " "
             << "число :";
        cin >> num[i];
    }
 
    a = ((num[0] << 1) + (num[1] >> 3));
 
    cout << "Ответ :"
         << a + (a << 2) + (a << 3) /* (a + 4*a + 8*a) == (1 + 4 + 8)*a == 13*a */
         << endl;
 
    return 0;
}
0
Злостный нарушитель
9448 / 5099 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
30.05.2018, 18:10 15
Цитата Сообщение от KuolFyI Посмотреть сообщение
но если поиграть с битами, то всё получается.
Значит мелом на гараже - правильный вариант?

Кстати, "+" - это не есть битовая операция!

Добавлено через 8 минут
...а раз так, то задача таки до сих пор не решена, товарищи!
0
12 / 12 / 13
Регистрация: 18.05.2018
Сообщений: 67
30.05.2018, 18:11 16
Сразу видно, что неправильно. Там не может быть битового или. Эта операция применяется для объеденения битов. Никаких вычислений математических она не делает.
0
Злостный нарушитель
9448 / 5099 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
30.05.2018, 18:15 17
Оказывается, тут есть даже сабж по сабжу.
Надеюсь, меня не забанят за ссылку внутри форума.
0
14 / 14 / 0
Регистрация: 01.12.2017
Сообщений: 577
30.05.2018, 18:18  [ТС] 18
Господа, вот этот код работает (a << 5) - (a << 2) - (a << 1) + (b << 1) - (b >> 2) - (b >> 3). Независимо от наличия +- , мне подходит. Спасибо
0
12 / 12 / 13
Регистрация: 18.05.2018
Сообщений: 67
30.05.2018, 18:18 19
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
31.05.2018, 16:46 20
Цитата Сообщение от Verevkin Посмотреть сообщение
Кстати, "+" - это не есть битовая операция!
но ведь + - она суммирует биты одного числа с битами другого числа) и скорость выполнения суммирования (вычитания) почти такая же как у сдвига. По каким критериям ты смотришь побитовая операция это или нет)
0
31.05.2018, 16:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2018, 16:46
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru