Не собирается long из байт

ks_junio
Offline
Зарегистрирован: 03.07.2019

Здравствуйте.

Не могу понять, почему у меня не собирается число unsigned long из байт. Например число 600000 разбивается на 192 39 9 0

Потом я собираю его обратно 192 | 39<<8 | 9 << 16 | 0 << 24 и получаю

192

10176

10176

10176

Контроллер atmega32u4. В чем может быть проблема?

sadman41
Offline
Зарегистрирован: 19.10.2016

Код на бочку. Ставлю на сдвиг битов в несуществующие разряды

b707
Онлайн
Зарегистрирован: 26.05.2017

ks_junio пишет:

Потом я собираю его обратно 192 | 39<<8 | 9 << 16 | 0 << 24 и получаю

по умолчанию все ваши вычисления производятся в типе int,  поэтому два верхних байта просто пропадают.

Пропишите в явном виде, что все это - long - и все получится

ks_junio
Offline
Зарегистрирован: 03.07.2019

b707 пишет:

ks_junio пишет:

Потом я собираю его обратно 192 | 39<<8 | 9 << 16 | 0 << 24 и получаю

по умолчанию все ваши вычисления производятся в типе int,  поэтому два верхних байта просто пропадают.

Пропишите в явном виде, что все это - long - и все получится

Да, получилось. Спасибо

Хотя я явно прописывал long a = 192 | 39<<8 | 9 << 16 | 0 << 24

sadman41
Offline
Зарегистрирован: 19.10.2016

"long a = 192 | 39<<8 | 9 << 16 | 0 << 24" предписывает компилятору расширить все операторы, участвующие в битшифтинге до int, произвести все операции и только после этого поместить результат в переменную типа long.

ks_junio
Offline
Зарегистрирован: 03.07.2019

Никак не разберусь с битовыми операциями

Green
Offline
Зарегистрирован: 01.10.2015

long a = 192 | 39<<8 | 9ul << 16 | 0 << 24