Перейти к содержанию
    

uint32_t в winavr 2007

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Как скомпоновать в uint32_t 4 байта?

a = ( (uint32_t)0x01<<24)|( (uint32_t)0x02<<16)|(0x03<<8)|(0x04);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...