Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
ioscat
0 / 0 / 0
Регистрация: 07.05.2014
Сообщений: 44
19.11.2014, 13:40     Приоритет побитовых операций #1
Всем привет.

Столкнулся с непоняшкой:
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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2134 / 967 / 223
Регистрация: 30.11.2013
Сообщений: 3,235
19.11.2014, 13:46     Приоритет побитовых операций #2
http://ru.cppreference.com/w/cpp/lan...tor_precedence
trots93
 Аватар для trots93
11 / 11 / 0
Регистрация: 18.09.2012
Сообщений: 54
19.11.2014, 13:54     Приоритет побитовых операций #3
Бьерн Страуструп. Язык программирования С++.
Раздел 3.2 Сводка операций. (стр 81 во втором издании).
Там таблица с операциями С++, отсортированная по приоритету выполнения. У поразрядного & ("И") приоритет ниже, чем у операции сложения +.
ioscat
0 / 0 / 0
Регистрация: 07.05.2014
Сообщений: 44
19.11.2014, 14:12  [ТС]     Приоритет побитовых операций #4
0xFA & 0x0F + 1 = 0x10

1111 1010
&
0000 1111 + 1 = 0001 0000
=
0001 0000
Байт
 Аватар для Байт
13964 / 8795 / 1223
Регистрация: 24.12.2010
Сообщений: 15,930
19.11.2014, 14:34     Приоритет побитовых операций #5
Цитата Сообщение от ioscat Посмотреть сообщение
Если добавить скобок, то всё ОК:
Вот лично я при работе с побитовыми всегда расставляю скобки, чтоб голову не ломать и не засорять ее нечасто используемой информацией
Yandex
Объявления
19.11.2014, 14:34     Приоритет побитовых операций
Ответ Создать тему
Опции темы

Текущее время: 06:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru