在int是32位的编译器中,无论是char int short
他们在左移或者右移的时候,都是 要移动的位数 对 32取余
例子
int nNum = 0x1fffffff;//32位
cout<<(nNum>>60)<<endl;
用60 对 32取余 得到 28 所以 nNum右移28位
cout的结果是1
代码
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int nNum = 0x1fffffff;//32位
cout<<(nNum>>52)<<endl;
nNum = 1;
cout<<(nNum<<36)<<endl;
cout<<(nNum<<32)<<endl;
nNum = 0xffffffff;
cout<<nNum<<endl;
cout<<(nNum>>31)<<endl;
unsigned int unNum = 0xffffffff;
cout<<unNum<<endl;
cout<<(unNum>>31)<<endl;
short sNum = 0x1fff;//16位
cout<<sNum<<endl;
cout<<(sNum>>17)<<endl;
char ch = 1;
cout<<(int)(ch>>32)<<endl;
return 0;
}
结果

本文详细探讨了在32位编译器中,如int、char、short等类型在进行左移和右移操作时,由于位数限制遵循的取余规则。通过实例演示和代码展示,解释了为什么位移后结果会受32位边界影响,并给出了几个关键代码片段的结果分析。
1224

被折叠的 条评论
为什么被折叠?



