Androliz 0 21 ноября, 2008 Опубликовано 21 ноября, 2008 (изменено) · Жалоба 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 байта? Изменено 21 ноября, 2008 пользователем Androliz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 21 ноября, 2008 Опубликовано 21 ноября, 2008 · Жалоба Почему компилятор жалуется, что при сдвиге выход за границы, если размер типа 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 0 21 ноября, 2008 Опубликовано 21 ноября, 2008 · Жалоба Так должно быть хорошо (1UL<<24)|(2UL<<16).... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться