Wrong result with bitwise inclusive OR

226
09 мая 2018, 04:24

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.

Answer 1

Это случай простреливания ноги посредством неявных преобразований.

В строчке 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
READ ALSO
Можно ли вычесть из вектора вектор?

Можно ли вычесть из вектора вектор?

я не знаю, не понимаю просто как реализовать данное задание

238
Запись объекта в файл без лишних символов

Запись объекта в файл без лишних символов

Изучаю запись/чтение данных в файл и столкнулся с такой проблемойЗаписываю объект в файл через методы read/write

183
Ошибки во встроенных библиотеках xutility и vector (Visual Studio 2012) [требует правки]

Ошибки во встроенных библиотеках xutility и vector (Visual Studio 2012) [требует правки]

Компилировал на Visual Studio 2012В самом коде ошибок нет, но если нужен код, то: https://drive

205