c++中的左移、右移运算

原创 2011年05月23日 18:58:00

  移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。

逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。

算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。

 

  c++中,整数分有符号数和无符号数两种,对于这两种数做左移、右移运算,稍有区别:

1、如果是无符号数,不管是左移还是右移都是“逻辑移位” 

例如,分别对无符号数 179 做左移、右移操作的结果,

 

  

                                                                                  图1 逻辑左移

 

 

 图2 逻辑右移

 

 

2、如果是有符号数,

2a,如果是做左移运算,那么做的是“逻辑移位”,同 1中无符号数的左移。

2b,如果是做右移运算,那么做的是“算术移位”。

 

例如:

  

图3 负数的右移

 

图4 正数的右移

 

    对于当前的大多数c/c++编译器来说,都是按照上面所讲实现的。

相关文章推荐

逻辑左移、算术左移、逻辑右移、算术右移区别

逻辑左移=算数左移,右边统一添0  逻辑右移,左边统一添0  算数右移,左边添加的数和符号有关   e.g:1010101010,其中[]是添加的位 逻辑左移一位:010101010[0] ...

逻辑左移、逻辑右移、算术左移、算术右移、循环左移、循环右移

逻辑左移时,最高位丢失,最低位补0; 逻辑右移时,最高位补0,最低位丢失; 算术左移时,依次左移一位,尾部补0,最高的符号位保持不变。 算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上...

算术移位与逻辑移位有什么不同

算术移位与逻辑移位有什么不同之处,最好能给出一个例子演示一下,谢谢了 检举|2011-09-02 13:16菲诺飞流 | 分类:汇编语言 | 浏览5513次 提问者采纳 ...
  • pi9nc
  • pi9nc
  • 2013年06月18日 15:34
  • 2070

位运算——左移右移运算详解

代码 #include "stdio.h" char leftshift(char i, int n) { if(n < 0) return -1; return ...

左移和右移计算

正数的左移和右移 以3为例 3的二进制为 00000011 右移2位的时候将最右的11去掉左边补00结果为:00000000  --- >十进是中的0 左移2位的时候将最左的00去掉右边补0...
  • iceryan
  • iceryan
  • 2013年01月28日 23:32
  • 3887

C++中左移<<和右移>>的使用

在C++中,经常会看到别人有int ans=1 1 #include 2 using namespace std; 3 int main() 4 { 5 int a = 1 4; 6 ...
  • jzwong
  • jzwong
  • 2015年04月13日 10:40
  • 6115

C语言移位运算符

位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。   位移位运算符的运...

02.算术左移逻辑左移,算术右移逻辑右移

 1.算术左移逻辑左移 算​术左移和逻辑左移一样都是右边补0: 比如 00101011​ 算术左移一位:01010110 逻辑左移一位​:01010110 对于二进制的数值来说左移n位...
  • yddj5
  • yddj5
  • 2016年10月15日 13:02
  • 883

C语言中的逻辑右移和算术左移

博主今天在写代码的时候遇到一个奇怪的问题,程序 的要求是实现一个int的移位操作,不管左移还是右移,空出来的位置通通置0即逻辑移位。一开始没注意太多直接用了移位操作符,结果却发现实现是错误的==! ...
  • zyings
  • zyings
  • 2015年07月27日 14:21
  • 3517

C语言中的左移与右移

先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用 int i = 1; i = i 也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++中的左移、右移运算
举报原因:
原因补充:

(最多只允许输入30个字)