在c++位运算里什么是左移位和右移位

2020-11-25 14:13:26 字数 3996 阅读 5897

1楼:匿名用户

移位操作在程序设计中,位操作运算符的一种。

1.在c++中,移位运算符有双目移位运算符:<<(左移)和>>(右移)。移位运算符组成的表达式也属于算术表达式,其值为算术值。

2.左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。3.

右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。

2楼:匿名用户

左移位就是比如二进制 0000 1011 左移一位就是 0001 0110,相当于乘2

右移位类似, 0000 1011 右移一位就是 0000 0101,相当于除2

c++中左移和右移位具体的步骤是怎么回事?

3楼:匿名用户

这是语言内部实现的。

不过总之就是将数的对应二进制左移或者右移,移了以后空出的补零例如int i = 5的二进制是 00000101i>>2 右移两位--> 00000001 (左边空出的补零)i<<2 左移两位--> 00010100 (右边空出的补零)不知楼主发现没有,右移一位就相当于将原来的数除以2,左移就相当于将原来的数乘以2.就像我们的十进制的小数点那样

4楼:江湖三脚猫

具体情况请去看《汇编语言》,这里简单解释下。

比如i是unsigned int型4字节32位,假设i=101,即00000000 00000000 00000000 01100101,右移1位即所有位数向右移动一位,最高位补0,最低位移出寄存器抛弃(看具体情况),结果就是00000000 00000000 00000000 00110010,即50;然后再右移一位结果就是00000000 00000000 00000000 00011001,即25.

可以看出来,右移一位相当于除以2,左移一位相当于乘以2.

c语言中位运算的左位移右位移都是什么意思

5楼:妹纸们的小傻瓜

假设0010

左移就是把二进制数向左移动,右边补

0,0的二进制全是0,左移之后右边再补0。

0010<<2 就是1000 实际是做的*4。

1000>>2 计算 0010 实际做的是/4。

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

位移位运算符的运算对象、运算规则与结果、结合性如表2-16所示。

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

具体移位规则如下所示。

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

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

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

例如,设无符号短整型变量a为0111(对应二进制数为0000000001001001),

则:a<<3 结果为01110(对应二进制数为0000001001001000),a不变

a>>4 结果为04 (对应二进制数为0000000000000100),a不变

又如,设短整型变量a为-4(对应二进制数为1111111111111100),

则:a<<3 结果为-32(对应二进制数为1111111111100000),a不变

a>>4 结果为-1(对应二进制数为1111111111111111),a不变

6楼:夏末雪人

说的是《和》吧。

《是左移,右边补零。比如a=a<<2,假如a=00011100b,左移以后就是01110000b.

>>是右移,无符号数左边补零;有符号数正数补零,负数补1。

7楼:_小_苏

0001 左移1位的话就变成 0010

右移1位 0000

c++ 位运算 循环左移为什么结果不对?

8楼:匿名用户

237,除非你的编译器对应的unsigned short int是1字节的

事实上unsigned short int至少是2字节的,所以输出493没问题

还有应写作printf("%hu",a);

9楼:匿名用户

a=123=bin(1111011)

b=a>>6=1

a=a<<2=bin(111101100)a=a|b=bin(111101101)=493没有问题哦。

c++中的左移右移运算有什么作用

10楼:匿名用户

首先在计算机中,不管是数字还是字母或者符号,都用一个特定的二进制码来表示,左移右移可以直接操纵二进制码,对于一些数字的处理非常方便,比如十进制的5用二进制表示为101,那么想变成10则左移一位,空位用0补充就变成了1010;如果想计算5/2取整,则直接右移一位变成010,就是2

11楼:匿名用户

可以快速地将对象乘2、4、8或除

c++中按位与按位或还有异或左移位右移位还有取反都是用什么计算方法的

12楼:匿名用户

左移向左移几位就用它和几个2相乘,右移同理。取反就是它一你就二,它二你就一

c++ 按位左移/右移运算符(<<、>>)的重载的问题。

13楼:匿名用户

位移运算符不需要重载。

#include

usingnamespacestd;

intmain()

{intx=0x3;

x=x<<1;

cout<

c++里面的左移符号与右移符号怎样输入?

14楼:匿名用户

在英文状态下按住shift键,输入两个‘>’就是右移,输入两个‘<’就是左移。两者位置字母“m”的后面。ok?不用截图吧?

15楼:我是_罗东

英文字符输入,连续两次 shift + 逗号和句号

16楼:匿名用户

两小于号,大于号(英文的)

“移位运算符在移位操作中,无论左移还是右移,所移出的空位一律补0”这句话是否正确?

17楼:等风亦等你的贝

不完全正确。

1、移位操作在程序设计中,移位操作运算符的一种。

2、在c++中,移位运算符有双目移位运算符:<<(左移)和》(右移)。移位运算符组成的表达式也属于算术表达式,其值为算术值。

3、首先要明白一点,这里面所有的操作都是针对存储在计算机中中二进制的操作,那么就要知道,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的。

左移位:<<,有符号的移位操作;

左移操作时将运算数的二进制码整体左移指定位数,左移之后的空位用0补充;

右移位:>>,有符号的移位操作;

右移操作是将运算数的二进制码整体右移指定位数,右移之后的空位用符号位补充,如果是正数用0补充,负数用1补充。

无符号的移位只有右移:>>>

右移之后的空位全部补0。

4、你可以用一个立即值(从 0 到 31)指定移位数量,或用包含在 0 和 31 之间的一个值的寄存器指定移位数量。

逻辑或算术左移(lsl)

mov r1, #12

mov r0, r1, lsl#2

r0 是 48,这些指令形成的总和是r0 = #12, lsl#2 等同于 basic 的 r0 = 12 << 2