位运算符左移右移怎么运算 3分钟了解位运算规则

Java语言、C语言或者其他语言中经常用到bit,所以本文不使用某一种语言作为例子。原点从0和1开始。按位运算主要有按位与(&)、按位或(|)、按位异或()、求反(~)、左移(:& gt)这

本文最后更新时间:  2023-04-25 16:49:40

Java语言、C语言或者其他语言中经常用到bit,所以本文不使用某一种语言作为例子。原点从0和1开始。按位运算主要有按位与(&)、按位或(|)、按位异或()、求反(~)、左移(<>:& gt)这几类运算符,除了否定(~)都是二元运算符,即运算符的左右两边都需要一个操作数。

1,补码

在总结按位运算之前,有必要先介绍一下补码的知识。我们知道,十进制正整数转换成二进制数,只需要除以2,取余数即可。但是如何将十进制负整数转换成二进制数呢?其实负数是用补码的形式表示的,它的转换方式是,简单一句话:先用正数转换,然后加1代替。

要用二进制表示十进制-10,先用二进制表示10:

0000 0000 0000 1010

反转:

1111 1111 1111 0101

添加1:

1111 1111 1111 0110

所以-10的二进制表示是:1111 1111 1111 0110。

2。按位and (& )

运算中涉及的两个数转换成二进制(0,1)后,进行AND运算。只有对应位上的数字都是1时,这个位取1,否则应该是0。

逐位AND (&)运算:

0000 0000 0000 1010

1111 1111 1111 0110

———————–

0000 0000 0000 0010

所以:10 & 10 = 0000 0000 0000 0010

3,按位或(|)

运算中涉及的两个数转换成二进制(0,1)后,执行OR运算。只要对应的位中有1,该位就取1,全部不为1,即0。

对10和-10执行按位或(|)运算:

0000 0000 0000 1010

1111 1111 1111 0110

———————–

1111 1111 1111 1110

所以:10 | -10 = 1111 1111 1111 1110

4。按位异或()

运算中涉及的两个数转换成二进制(0,1)后,执行异或运算。只有对应位上的数字不相同时,值为1,相同时为0。

对10和-10执行按位XOR()运算:

0000 0000 0000 1010

1111 1111 1111 0110

———————–

1111 1111 1111 1100

所以:10-10 = 1111 1111 1111 1111 1100

可以看出,任何一个数与0进行异或,结果就是它本身。XOR也可以用来实现一个很好的交换两个数的交换算法。算法如下:

a = a ^ b;

b = b ^ a;

a = a ^ b;

5。反转(~)

参与运算的两个数转换成二进制(0,1)后,求反。每个位取相反的值,1变成0,0变成1。

求反(~) 10:

0000 0000 0000 1010

———————

1111 1111 1111 0101

所以:~10 = 1111 1111 1111 0101

6。向左移动(<>

运算中涉及的两个数转换成二进制(0,1)后,进行左移运算,用于将一个数的所有二进制位向左移动若干位。

将10左移2位(相当于右加2个零):

0000 0000 0000 1010

——————–

0000 0000 0010 1000

所以:10<>

注意观察发现,左移一位的结果是原值乘以2,左移两位的结果是原值乘以4。

7。向右移动(>:& gt)

运算中涉及的两个数转换成二进制(0,1)后,进行右移运算,用于将一个数的所有二进制位向右移动若干位。

将10向右移动2位(相当于向左添加2个零):

0000 0000 0000 1010

——————–

0000 0000 0000 0010

so:10 >:>2 = 0000 0000 0000 0010 = 2

注意,我们可以观察到,右移一位的结果是原值除以2,左移两位的结果是原值除以4。注意,以后除了没有小数位的,都是四舍五入。

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。