Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Почему не работает сдвиг битов
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
*rust*
Добрый день!

unsigned long total = 0; //32bit
unsigned int part1 = 0xAABB; //16bit
unsigned int part2 = 0xCCDD; //16bit

total = ((part1 << 16) + part2);

Результат получается total = 0x0000CCDD;

При компиляции выдает сообщение, что слишком большой сдвиг. Если вместо 16 поставить 8, все нормально.

Почему не выходит сдвинуть больше 8-ми разрядов?
_Bill
Цитата(*rust* @ Nov 11 2011, 12:18) *
Добрый день!

unsigned long total = 0; //32bit
unsigned int part1 = 0xAABB; //16bit
unsigned int part2 = 0xCCDD; //16bit

total = ((part1 << 16) + part2);

Результат получается total = 0x0000CCDD;

При компиляции выдает сообщение, что слишком большой сдвиг. Если вместо 16 поставить 8, все нормально.

Почему не выходит сдвинуть больше 8-ми разрядов?

Код
total = (((long)part1 << 16) + part2);
Или нет?
*rust*
Эх... преобразование типов!

Да, помогло, спасибо! a14.gif
bb-offtopic.gif
Сергей Борщ
QUOTE (*rust* @ Nov 11 2011, 11:18) *
При компиляции выдает сообщение, что слишком большой сдвиг.
Правильно говорит
QUOTE (*rust* @ Nov 11 2011, 11:18) *
Почему не выходит сдвинуть больше 8-ми разрядов?
На самом деле можно в вашем случае хоть на 15 разрядов. Причина - правила неявного приведения целочисленных типов (integer promotion rules). int в MSP430 имеет разрядность 16 бит. См. по ссылке 1.3.2. Преобразования при вычислении выражений
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.