2

Primer 5th edition から C++ を勉強しています。質問の1つは次のとおりです。

'q' がビット パターン 01110001 を持つ Latin-1 文字セットを使用する、32 ビット int と 8 ビット char を持つマシンでの ~'q' << 6 の値は何ですか?

私が混乱しているのは、コンパイラが ~ または < の前に 'q' を 32 ビット int に変換するかどうかです。

私が理解している限りでは、次のように動作するはずです。

'q' = 01110001

~'q' = 10001110

~'q' << 6 = 00000000000000000010001110000000

私は正しいですか?

4

2 に答える 2

7

演算子~は、そのオペランドで整数昇格を実行します (C++11、[expr.unary.op]§10)。つまり、補完を行う前にchartoを変換します。intしたがって、次のようになります。

'q' == 01110001

~ 'q' == ~ 00000000000000000000000001110001

~ 'q' == 11111111111111111111111110001110

次に、問題が発生します。の値~ 'q'が負であることがわかります。負の値を左シフトすると、未定義の動作になります ( [expr.shift]§2)。(この最後の部分を指摘してくれた@colombienの回答に感謝します)

于 2013-10-25T09:06:50.990 に答える