位算符详解 按位与、或、异或、取反、左移、右移(位运算符怎么算)

网友投稿 783 2022-08-22


位算符详解 按位与、或、异或、取反、左移、右移(位运算符怎么算)

1.按位与(&)

int a = 3, b = -2 , c = a & b ;

3&-2结果:2

2.按位或(|)

int a = 3, b = -2 ,

3|-2结果:-1

3.按位异或(^)

int a = 3, b = -2 , c = a ^ b ;

3^-2结果:-3

4.按位取反(~)

int a=18, b = ~ a;

~2结果:-3

5.左移(<<)

<<  :左移 左边最高位丢弃,右边补齐0

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方

32>>3结果:4

用来将一个数的各二进制位全部左移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其右边空出的位用0填补,高位左移溢出则舍弃该高位。

左移表达式的的位 result = expression1 << expression2

参数 result,任何变量。

expression1,任何表达式,需要移位的数字。

expression2,任何表达式,移位的次数。

用来将一个数的各二进制位全部左移若干位。例如:

将a的二进制数左移2位,右补0。若a=15,即二进制数00001111,左移2位得00111100,即十进制数60(为简单起见,用8位二进制数表示十进制数15,如果用左移运算符16位二进制数表示,结果是一样的)。

高位左移后溢出,舍弃。

左移一位相当于该数乘以2,左移2位相当于该数乘以2^2=4。上面举的例子15<< 2=60,即乘了4。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。

例如,假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64,即二进制数01000000时,左移一位时溢出的de是0。而左移2位时,溢出的高位中包含1,则不符合上述结论。

由下表可以看出,若a的值为64,在左移一位后相当于乘2,左移2位后,值等于256。

简单介绍一种方便计算的方法:

8 << 1的值为8*2=16;

8 << 2的值为8*(2^2)=32;

8 << n的值为8*(2^n)。

数学意义:

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

6.右移(>>)

>> :右移 最高位是0,左边补齐0;最高为是1,左边补齐1

右移一位相当于除2,右移n位相当于除以2的n次方。

2<<3结果:16

右移有两种:

1、逻辑右移:丢弃最低位,向右移位,左边空出来的位置补0

2、算术右移:丢弃最低位,向右移位,左边空出来的位置补原来的符号位(即补最高位)


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python为什么运行效率低?受哪些因素影响?(python的不足是执行效率不够高)
下一篇:resty mail的简单发送邮件方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~