在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;
}