逻辑移位和算术移位

来源:互联网 发布:山东淘宝商城 编辑:程序博客网 时间:2024/05/16 04:53

逻辑移位:移位产生的空位由0来补充,比如11100右移移位变为01110

算术左移同逻辑移位。

算术右移有两种可选的方案:左边移入的位由0补充,或者由符号位来补充,这两种实现依赖于编译器。11100右移移位结果可能是01110或者11110。

在程序中尽量不使用有符号数的右移操作,这样会使得程序的可移植性变差。

对于有符号数右移,下面的代码可以判断编译器采用的逻辑右移还是算术右移

# include <iostream># include <cstdlib>using namespace std;int main(){int a=0xfffffffe;a>>=1;if(a==-1)cout<<"算术移位"<<endl;elsecout<<"逻辑移位"<<endl;system("pause");return 0;}
由于有符号数左移操作会把符号位移掉,然后在最右边加上0,这可能会使得一个负数变成一个正数。

下面的程序说明了这一点。

# include <iostream># include <cstdlib>using namespace std;int main(){int a=0x80000001; //a<0cout<<a<<endl;a<<=1;cout<<a<<endl;   //a>0system("pause");return 0;}

0 0
原创粉丝点击