我正在学习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指出了最后一部分)