我正在学习Primer 5th Edition中的C++。问题之一是:



我感到困惑的是,编译器会将〜之前的
据我了解,它应该像这样工作:

'q' = 01110001

~'q' = 10001110

~'q' << 6 = 00000000000000000010001110000000

我对吗?

最佳答案

运算符~在其操作数(C++ 11,[expr.unary.op]§10)上执行积分提升。这意味着它将在进行补码之前将char转换为int。因此它将像这样:

'q' == 01110001

~ 'q' == ~ 00000000000000000000000001110001

~ 'q' == 11111111111111111111111110001110

然后是一个问题。我们看到~ 'q'的值为负。左移负值具有未定义的行为([expr.shift]§2)。 (感谢@colombien's answer指出了最后一部分)

07-28 01:35