Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: uint32_t в winavr 2007
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Androliz
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, 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);
demiurg_spb
Так должно быть хорошо (1UL<<24)|(2UL<<16)....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.