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

 
 
> uint32_t в winavr 2007, выход за границы типа при сдвиге
Androliz
сообщение Nov 21 2008, 11:55
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 22-09-06
Из: Беларусь
Пользователь №: 20 595



uint32_t a;
uart1_puthex_byte(sizeof(a));//0x04
a = (0x01<<24)|(0x02<<16)|(0x03<<8)|(0x04);
//main.c:415: warning: left shift count >= width of type
//main.c:415: warning: left shift count >= width of type
uart1_puthex_word(a>>16);//0x0000
uart1_puthex_word(a&0x0000ffff);//0x0304

Почему компилятор жалуется, что при сдвиге выход за границы, если размер типа 4 байта?
Как скомпоновать в uint32_t 4 байта?

Сообщение отредактировал Androliz - Nov 21 2008, 12:00
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
Непомнящий Евген...
сообщение Nov 21 2008, 12:07
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Androliz @ Nov 21 2008, 14:55) *
Почему компилятор жалуется, что при сдвиге выход за границы, если размер типа 4 байта?

Потому что тип 0x01 - int (16 бит), тип результата сдвига - тоже int, а значение 0x01<<24 в 16 бит не влезает.
Цитата
Как скомпоновать в uint32_t 4 байта?

a = ( (uint32_t)0x01<<24)|( (uint32_t)0x02<<16)|(0x03<<8)|(0x04);
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 21 2008, 12:07
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Так должно быть хорошо (1UL<<24)|(2UL<<16)....


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:43
Рейтинг@Mail.ru


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