int8 a = <some value>;
int16 b = <some value>;
a |= b;
- この例のための定義された動作とは何ですか?
a
は16ビット整数としてスレッド化されますか?b
は8個の最上位ビットを削除しますか?- どちらもレジスタサイズを使用し、割り当てられない最上位ビットをすべてドロップしますか?
- これは未定義の動作ですか?同様に
int8_t
とint16_t
両方がint
より低い変換ランクを持っている最も一般的なシステム†(私が今まで使用してきたすべて)、
「uint16_t」の値は、符号付き16ビットintに昇格されたときに符号を変更しませんか、それとも積極的昇進では変化しませんか? – Broxzier
@Broxzier 'int'が16bit以上であれば値は変更されません(16bit以上のすべての16bitが2の補数で表現できるので、' int'が16bit(C++標準では最低限必要) unsigned intに変換されます。 – SergeyA