Deo*_*oeh 2 c++ bit-manipulation
我正在从Primer第5版学习C++.其中一个问题是:
在具有32位整数和8位字符的机器上,''q'<< 6的值是多少,它使用拉丁-1字符集,其中'q'具有位模式01110001?
我感到困惑的是编译器会在〜之前或之前将'q'转换为32位int
据我所知,它应该这样工作:
'q' = 01110001
~'q' = 10001110
~'q' << 6 = 00000000000000000010001110000000
Run Code Online (Sandbox Code Playgroud)
我对吗?
运算符~对其操作数执行整数提升(C++ 11,[expr.unary.op]§10).这意味着它会转换char到int做补充之前.所以它会是这样的:
'q' == 01110001
~ 'q' == ~ 00000000000000000000000001110001
~ 'q' == 11111111111111111111111110001110
Run Code Online (Sandbox Code Playgroud)
然后出现问题.我们看到的价值~ 'q'是负面的.左移负值具有未定义的行为([expr.shift]§2).(感谢@ colombien的回答指出最后一部分)