位运算

当你的才华还支撑不起你的野心的时候,你就应该停下来学习。

今天我们来了解一下位运算,可以说在所有的编程的中都有位运算。那么,位运算是怎么计算的呢?下面我就来详细介绍一下。注意:以下例子以java语言为参照。

位与(and)运算 &

计算规则:假设有两个数a和b,将它们分别转换成二进制。然后两个数对应的二进制数位中都为1结果就为1,如果其中一个数为0或者两个数都为0,则结果为0。

举个例子:

int a=6;
int b=3;
int c=a&b;

c的值为多少呢?
很简单我们来计算一下(这里我们采用4位来计算,实际计算机中是采用8位):在这里插入图片描述
按照什么的图片中进行位与操作之后那么c的值为0010,所对应的十进制就是整数2。

我们来看一下,上面是怎么得出二进制0010的。
首先,我们看a和b所对应的二进制:
(1)在第位中:a的二进制为0,b的为1。因为两个值其中有一个为0,一个为1,所以第四位的结果为0。
(2)在第位中:a的二进制为1,b的为1。因为两个两个值都为1。所以第三位的结果位1。
(3)在第位中:a的二进制为1,b的为0。因为两个值其中有一个为1,一个为0,所以第二位的结果为0。
(4)在第位中:a的二进制为0,b的为0。因为两个值其中有一个为0,一个为0,所以第一位的结果为0。
(5)将四位数按位数顺序拼接起来,结果就为:0010。也就对应十进制数的数字2。

位或(or)运算 |

计算规则:假设有两个数a和b,将它们分别转换成二进制。然后两个数对应的二进制数位中其中一个为1结果就为1;如果两个数都为0,则结果为0;如果两个都为1,结果也为1。

举个例子:

int a=6;
int b=3;
int c=a|b;

这里就不画图演示了。计算的顺序和位与运算的顺序是一样的,只是规则不同。
a :0110
b :0011
所以c的结果为:
c :0111
c所对应的是十进制数位:7

异或(Xor)运算 ^

计算规则:假设有两个数a和b,将它们分别转换成二进制。然后两个数对应的二进制数位中相同则为0,不同则为1。

举个例子:

int a=6;
int b=3;
int c=a^b;

这里同样不画图了。直接推算一下:
a :0110
b :0011
所以c的结果为:
c :0101
c所对应的是十进制数位:5

按位取反运算 ~

这个就有点特殊了,涉及到源码,反码,补码

计算规则:①:正数的三个码都一致。正数的按位取反等于这个正数所对应的负数的二进制加1。
②:负数的源码等于所对应的正数的源码,最高为变为1。反码等于除符号位外负数的源码取反。补码等于负数的反码加1。负数的按位取反就等于补码取反。

举个例子(正数):

int a=6;
int b=~a;

这里就要用八位计算了,直接推算一下:
a :0000 0110 //源码
a :0000 0110 //反码
a :0000 0110 //补码
a :1000 0110 //变负数,-6
a :1000 0111 //按位取反后的值=变负数的源码+1

c所对应的是十进制数位:-7

举个例子(负数):

int a=-6;
int b=~a;

直接推算一下:
a :1000 0110 //源码
a :1111 1001 //反码=源码取反(除去符号位)
a :1111 1010 //补码=反码+1
a :0000 0101 //按位取反=补码取反

b :0000 0101
b所对应的是十进制数位:5




以上就是对位运算的介绍了,希望对你有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值