首页 > 代码库 > 逻辑移位和算术移位
逻辑移位和算术移位
逻辑移位:移位产生的空位由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; else cout<<"逻辑移位"<<endl; system("pause"); return 0; }由于有符号数左移操作会把符号位移掉,然后在最右边加上0,这可能会使得一个负数变成一个正数。
下面的程序说明了这一点。
# include <iostream> # include <cstdlib> using namespace std; int main() { int a=0x80000001; //a<0 cout<<a<<endl; a<<=1; cout<<a<<endl; //a>0 system("pause"); return 0; }
逻辑移位和算术移位
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。