У меня есть следующая функция для чтения четырехзначного слова с прямым порядком байтов (в абстрактном базовом файле ввода-вывода):
unsigned long long File::readBigEndQuadWord(){
unsigned long long qT = 0;
qT |= readb() << 56;
qT |= readb() << 48;
qT |= readb() << 40;
qT |= readb() << 32;
qT |= readb() << 24;
qT |= readb() << 16;
qT |= readb() << 8;
qT |= readb() << 0;
return qT;
}
Функции readb () считывают байты. Вот используемые определения типов:
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
Дело в том, что я получаю 4 предупреждения компилятора в первых четырех строках с помощью операции shift:
предупреждение C4293: «<<»: число смен
отрицательный или слишком большой, неопределенный
поведение </p>
Я понимаю, почему возникает это предупреждение, но я не могу понять, как от него избавиться правильно . Я мог бы сделать что-то вроде:
qT |= (unsigned long long)readb() << 56
;
Это удаляет предупреждение, но нет ли другой проблемы, будет ли БАЙТ правильно все время расширяться? Может быть, я просто слишком много думаю об этом, и решение так просто. Можете ли вы, ребята, помочь мне здесь? Благодаря.