I can't figure out why does inclusive OR return wrong result.
char arr[] = { 0x0a, 0xc0 };
uint16_t n{};
n = arr[0]; // I get 0x000a here.
n = n << 8; // Shift to the left and get 0x0a00 here.
n = n | arr[1]; // But now the n value is 0xffc0 instead of 0x0ac0.
What is the mistake in this example? Console app, MVS Community 2017.
Это случай простреливания ноги посредством неявных преобразований.
В строчке n = n | arr[1]
происходит следующее:
// оба аргумента приводятся к int
int ni = static_cast<int>(n); // 0x00000a00
int arri = static_cast<int>(arr[1]); // 0xffffffc0
// вызов bitwise or
int bitorres = ni | arri; // 0xffffffc0
// результат операции приводится к целевому типу
n = static_cast<uint16_t>(bitorres); // 0xffc0
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Изучаю запись/чтение данных в файл и столкнулся с такой проблемойЗаписываю объект в файл через методы read/write
Компилировал на Visual Studio 2012В самом коде ошибок нет, но если нужен код, то: https://drive