右移运算符

右移运算符

运算符号
右移运算符,移位运算符的一种:程序设计中,位操作运算符的一种。在c++中,移位运算符有双目移位运算符:>(右移)。移位运算符组成的表达式也属于算术表达式,其值为算术值。左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。(均由机器来定)分类:移位运算包含“逻辑移位”(logicalshift)和“算术移位”(arithmeticshift)。逻辑移位:移出去的位丢弃,空缺位(vacantbit)用0填充。算术移位:移出去的位丢弃,空缺位(vacantbit)用“符号位”来填充,所以一般用在右移运算中。[1]
    中文名:右移运算符 外文名: 别名: 含义:移位运算符的一种 用途:程序设计 运算符号:<<、>>

基本介绍

移位运算符的一种:

C语言中位移位运算符

位移位运算符

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

位移位运算符的运算对象、运算规则与结果、结合性所示。

移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移有关。如果是左移,则规定补入的数全部是0;如果是右移,还与被移位的数据是否带符号有关。若是不带符号数,则补入的数全部为0;若是带符号数,则补入的数全部等于原数的最左端位上的原数(即原符号位)。具体移位规则如下所示。

位移位运算符的优先级如下:

算术运算符优先于位移位运算符优先于关系运算符

位移位运算符是同级别的,结合性是自左向右

举例

先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如>运算符.例如

也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号变化,下面解释原因)

需要注意的一个问题是int类型最左端的符号位和移位移出去的情况.我们知道,int是有符号的整形数,最左端的1位是符号位,即0正1负,那么移位的时候就会出现溢出,例如:

那么,i在左移1位之后就会变成0x80000000,也就是2进制的100000...0000,符号位被置1,其他位全是0,变成了int类型所能表示的最小值,32位的int这个值是-2147483648,溢出.如果再接着把i左移1位会出现什么情况呢?在C语言中采用了丢弃最高位的处理方法,丢弃了1之后,i的值变成了0.

左移里一个比较特殊的情况是当左移的位数超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,然后按余数进行移位,如

相关词条

相关搜索

其它词条