我正确地将unsigned int移动了32但它根本不影响数字,为什么会发生?
int main()
{
unsigned int rnd=2347483648;
cout<<rnd;
rnd=rnd>>32;
cout<<endl<<rnd;
}
Run Code Online (Sandbox Code Playgroud)
当代码运行时,它会显示两次rnd,完全没有任何影响.我相信在右移32位int后,它不应该显示为零吗?
And*_*ter 11
您缺少一个赋值运算符 - >>
移位运算符不会"就地"执行操作:
rnd = rnd >> 32;
Run Code Online (Sandbox Code Playgroud)
您还可以使用复合移位运算符,它应用移位操作,然后将结果分配回变量:
rnd >>= 32;
Run Code Online (Sandbox Code Playgroud)
但是,在这两种情况下,此代码都会导致未定义的行为,请参阅 将32位整数移位32位:
如果右操作数的值为负或大于或等于提升的左操作数的宽度,则行为未定义.
所以你可以从那个操作得到任何结果.
归档时间: |
|
查看次数: |
893 次 |
最近记录: |