Я хорошо осмотрелся и не могу найти подобный вопрос, так что извиняюсь, если он был задан раньше.
Я просто играю с типами и числами, и мне интересно, можно ли гарантировать следующее поведение. Если я объявляю 2 переменные как
unsigned char BIT_8 = 0;
unsigned short int BIT_16 = 0xFF01;
а затем выполните следующие действия (игнорируя покадровый стиль C, если это не повлияет на это?)
cout << "BIT_16: " << BIT_16 << "\n";
cout << "BIT_8: " << (int)BIT_8 << "\n";
BIT_8 = BIT_16;
cout << "BIT_8 after: " << (int)BIT_8 << "\n";
BIT_8 = BIT_16 >> 8;
cout << "BIT_8 after shift: " << (int)BIT_8 << "\n";
Я получаю вывод
BIT_16: 65281
BIT_8: 0
BIT_8 after: 1
BIT_8 after shift: 255
Гарантируется ли, что если я передам 16-разрядный тип 8-разрядному типу, который будет потерян, то будет вестись старший байт? или это undefined, и приведенные выше результаты - удача?