Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ioscat
1 / 1 / 0
Регистрация: 07.05.2014
Сообщений: 44
#1

Приоритет побитовых операций - C++

19.11.2014, 13:40. Просмотров 511. Ответов 4
Метки нет (Все метки)

Всем привет.

Столкнулся с непоняшкой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Объявляем два массива и инициализируем их    
    unsigned char A[5]={0xFF, 0x03, 0x00, 0x00, 0xB6};
    unsigned short B[4]={0};
 
   
    // Смотрим, что внутри
    cout << (unsigned short)A[0] << " " ;
    cout << hex << (unsigned short)A[0] << endl;
   
    cout << (unsigned short)A[1] << " " ;
    cout << hex << (unsigned short)A[1] << endl;
   
    // Пробуем провернуть операцию:
    B[0]=(A[1]<<8)&0x3FF ;
    cout << " B[0] is: " << B[0] << endl;
B[0] is: 300
А теперь немного изменим код:
C++
1
B[0]=(A[1]<<8)&0x3FF + 1;
B[0] is: 0
Вопрос - с чего вдруг так, по идее должно быть 301!

Если добавить скобок, то всё ОК:
C++
1
B[0]=((A[1]<<8)&0x3FF)+1;
B[0] is: 301
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 13:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приоритет побитовых операций (C++):

Пояснение побитовых операций - C++
Прошу объяснить на пальцах/на примере что значит следующая строчка, каким именно образом осуществляется сдвиг вправо на 4 разряда? что...

Странное взаимовлияние побитовых операций - C++
Запускаю в VS C++ 2012 int shift = 30; long long x = 1&lt;&lt;shift; long long y = ~0; //int x = 1&lt;&lt;shift; //int y = ~0; ...

Перегрузка побитовых логических операций - C++
Всем привет! Хотел спросить, можно ли как нибудь перегрузить логическую операцию &quot;И - &amp;&quot; так, чтобы в ней участвовало 2 аргумента? Если...

Установка бита с использованием побитовых операций - C++
Есть следующая программа, которой задается само число/символ (unsigned char), переводит программа в двоичный вид, и бит, который был задан...

Определение остатка от деления с помощью побитовых операций - C++
Народ, недавно начал изучать С++ и наткнулся на один пример. Никак не могу додуматься как его решить. Надеюсь тут есть старшие товарищи...

Перевод Unsigned char в двоичный вид с использованием побитовых операций - C++
Вводится с клавиатуры переменная типа unsigned char, с помощью побитовых операций переводится в двоичный вид и выводится на экран....

4
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
19.11.2014, 13:46 #2
http://ru.cppreference.com/w/cpp/language/operator_precedence
0
trots93
11 / 11 / 0
Регистрация: 18.09.2012
Сообщений: 54
19.11.2014, 13:54 #3
Бьерн Страуструп. Язык программирования С++.
Раздел 3.2 Сводка операций. (стр 81 во втором издании).
Там таблица с операциями С++, отсортированная по приоритету выполнения. У поразрядного & ("И") приоритет ниже, чем у операции сложения +.
0
ioscat
1 / 1 / 0
Регистрация: 07.05.2014
Сообщений: 44
19.11.2014, 14:12  [ТС] #4
0xFA & 0x0F + 1 = 0x10

1111 1010
&
0000 1111 + 1 = 0001 0000
=
0001 0000
0
Байт
Эксперт C
16529 / 10799 / 1637
Регистрация: 24.12.2010
Сообщений: 20,810
19.11.2014, 14:34 #5
Цитата Сообщение от ioscat Посмотреть сообщение
Если добавить скобок, то всё ОК:
Вот лично я при работе с побитовыми всегда расставляю скобки, чтоб голову не ломать и не засорять ее нечасто используемой информацией
0
19.11.2014, 14:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2014, 14:34
Привет! Вот еще темы с ответами:

Перевод десятичного вещественного числа в двоичное путем побитовых операций (Делить на 2 нельзя) - C++
Нужно написать код на С++, который переводит вещественное десятичное число в двоичное с помощью битовых операторов(Сдвиги, &amp;, | и т.п) ...

Создать функцию для вывода на экран целого числа в двоичной системе счисления с применением побитовых операций. - C++
Создать функцию для вывода на экран целого числа в двоичной системе счисления с применением побитовых операций. Использовать функцию при...

приоритет операций - C++
while(*a++==*b++ &amp;&amp; *a!=NULL) хочу сравнить до конца строки &quot;а&quot;. почему не работает? где-то дело в приоритете, а где найти не...

Приоритет операций - C++
Здравствуйте, а не подскажите что в С-подобных языках приоритетнее: сложение/вычитание, побитовые операции, умножение/деление


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru