Здравствуйте.
Как то я поплыл со сдвигами битов. Задача - поменять порядок байтов в int
unsigned int econv(unsigned int from) {
unsigned int value = from;
std::cout << std::hex << "original: " << from << " : " << sizeof(value) << std::endl;
value |= (from & 0xFF000000) >> 24;
// выделяю из оригинала первый байт, сдвигаю в конец и через "ИЛИ" применяю изменения
std::cout << from << " >> 24 " << value << std::endl;
value |= (from & 0x00FF0000) >> 8;
// выделяю второй байт и сдвигаю его на место 3го
std::cout << from << " >> 8 " << value << std::endl;
value |= (from & 0x0000FF00) << 8;
// если со сдвигом в право все окей, то со сдвигом в лево проблемы - value не изменяется тут вообще, я что-то не так делаю?
std::cout << from << " << 8 " << value << std::endl;
value |= (from & 0x000000FF) << 24;
// правый сдвиг последнего байта на позицию 1го тоже не отражается в результате
std::cout << from << " << 24 " << value << std::endl;
return value;
}
Все сдвиги в право не отражаются на результате и я в упор понять не могу где именно я "поплыл"? Может я не правильно понимают суть сдвигов?
Вроде через "битовое И" правильно выделяю байты, потом сдвигаю в нужную позицию и применяю к результату через "битовое ИЛИ"...