Sha*_*ian -1 c++ bit-manipulation
特定
int a = 1;(00000000000000000000000000000001),
我做的只是
a=(a<<31)>>31;
Run Code Online (Sandbox Code Playgroud)
我认为a应该仍然1在这个陈述之后(我认为没有改变).但事实证明是-1(11111111111111111111111111111111).谁知道为什么?
你缺少的是在C++中,右移>>是实现定义的.它可以是有符号值的逻辑或算术移位.在这种情况下,它1从左侧移动s以保留移位值的符号.通常,您希望避免对签名值进行转换,除非您确切地知道它们是正面的或者转换实现无关紧要.
| 归档时间: |
|
| 查看次数: |
2032 次 |
| 最近记录: |