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++编译器来说,都是按照上面所讲实现的。

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:28
  • 10167

C++中左移右总结

移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。 逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。 算术移位:移出...
  • wang_jing_2008
  • wang_jing_2008
  • 2012-09-11 15:46:47
  • 2441

C++中的整数的左移和右移运算符

C++中的int型一般都占四个字节,范围在
  • YiXingTianXiassss
  • YiXingTianXiassss
  • 2014-11-18 15:45:30
  • 4272

C++中右移和左移

关于移位操作:“”右移位操作:对于无符号数从左边开始补0;对于有符号数,或者补符号位,或者补0,由编译器决定(gcc的编译器是补符号位)注意:移位的数目是负数或者移位出界时(最多只能移位类型二进制位大...
  • guanzhongshan
  • guanzhongshan
  • 2015-09-09 10:45:22
  • 232

【C语言/C++】算术移位和逻辑移位以及一道移位的题目

最近下了个牛客APP,在上面做了几道题。 在做题的过程中呢。我发现了一道比较有意思的题目 老规矩,直接上代码 int main() { int a = 1; int b = 32; printf...
  • qq_31828515
  • qq_31828515
  • 2016-11-22 15:44:34
  • 1973

C++移位运算符

关于逻辑移位、算术移位可参见迅雷深大笔试题部分。的一道题。 以前看到C++标准上说,移位运算符(>)出界时的行为并不确定: The behavior is undefined if the rig...
  • hgl868
  • hgl868
  • 2011-12-10 07:43:31
  • 35844

C/C++移位运算

一、移位运算符及其规则 移位运算符就是在二进制的基础上对数字进行平移,是在补码的基础上进行操作的。按照平移的方向和填充数字的规则分为三种:>(带符号右移)、>>>(无符号右移)。 左移运算符的规...
  • captain_wangnb
  • captain_wangnb
  • 2016-01-15 11:17:37
  • 2463

C++用位运算实现循环移位

转自:http://www.cnblogs.com/alex4814/archive/2011/09/08/2171862.html 循环移位区别于一般移位的是移位时没有数位的丢失。 循环...
  • xiaolei09bupt
  • xiaolei09bupt
  • 2015-04-19 17:10:01
  • 1236

C语言 有符号数和无符号数的移位运算

对于无符号数来说,左移和右移都是用的逻辑移位,即左移低位空出的补0,右移高位空出的补0; 对于有符号数来说,用的是算术移位,左移多出的会移进符号位,右移在gcc编译器下是算术右移,即空出的高位补符号位...
  • qq_21411985
  • qq_21411985
  • 2015-02-23 18:35:22
  • 3014

java的算术右移(>>)、算术左移(<<)及逻辑右移(>>>,无符号移位)

首先说明一点,本文所有的操作都是针对存储在计算机中中二进制的操作,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的。 算术左移( 算术右移(>>):有符号的移位操作;该操作时将运算数的二...
  • u013399093
  • u013399093
  • 2017-04-21 17:17:17
  • 673
收藏助手
不良信息举报
您举报文章:c++中的左移、右移运算
举报原因:
原因补充:

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