реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Почему не работает сдвиг битов, for IAR MSP430
*rust*
сообщение Nov 11 2011, 08:18
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



Добрый день!

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

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

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

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

Почему не выходит сдвинуть больше 8-ми разрядов?
Go to the top of the page
 
+Quote Post
_Bill
сообщение Nov 11 2011, 08:25
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(*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);
Или нет?
Go to the top of the page
 
+Quote Post
*rust*
сообщение Nov 11 2011, 09:06
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



Эх... преобразование типов!

Да, помогло, спасибо! a14.gif
bb-offtopic.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 11 2011, 09:06
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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. Преобразования при вычислении выражений


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 09:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016