次のコードを検討してください。
uint32_t x = ~uint8_t(0);
std::cout << x << std::endl;
さて、私はこれが を出力することを完全に期待していまし255
たが、代わりに を出力し4294967295
ました。
C++ での整数昇格は知っていますが、なぜそうなるのか理解できません。私が理解している方法では、式はバイナリ~uint8_t(0)
で評価する必要があります。1111 1111
次に、演算子は、値を に符号拡張することにより、型を an (説明のために 32 ビットであると想定します)~
に昇格させます。この昇格された値は、左辺値に割り当てられる必要があり、結果は になります。 int
0000 0000 0000 0000 0000 0000 1111 1111
x
x == 255
しかし、明らかに私はこれを正しく理解していません。私は何が欠けていますか?