本篇文章给大家讲解编程软件中的运算符底层实现原理!
1.按位与运算&
按位与运算的底层运算过程如下
十进制:
3&5=1
二进制
0011&0101
= 0001
按位与运算就是将3的二进制上的每个bit位与5的二进制上的每个bit位比较如果两个bit位上的数相同则保留否则为0!
2.按位或运算|
按位或运算底层实现原理如下
十进制:
3|5=7
二进制:
0011|0101
= 0111
底层CPU执行过程:
如果bit位上的数为1则保留否则为0
3.按位异或运算
十进制:
3^5=6
二进制:
0011^0101
= 0110
底层CPU执行过程:
如果两个bit位上的数不同则保留为1相同则为0
4.取反运算符
十进制;
~5
二进制:
5: 0101
~: 1010(连同符号位一起取反)
~: 1101(在取反转换成负数的原码)
=: 1110(把低位进一)
1110=-6(得到-6)
底层CPU执行过程:
执行过程是先将5的二进制码取反运算包括符号位,然后在取反转换成负数的原码在末位的二进制数进一
5.位移运算符
十进制:
3<<2=12
二进制:
3: 0011
<<2
12: 1100
底层CPU执行过程:
位移运算是所有运算符里最容易理解的,左移(<<)两位就是将二进制上的bit位左移2位,这里说一个知识点,假如对0110这个二进制位右移4位会怎么样?答:右移四位则0000因为移动的位超出了寄存器的位数,如果移动的位数超出该二进制上的bit位最小或者最大那么这个位移的二进制数就会丢弃!
这些按位运算可以组合在一起用的,通常多数用在底层上操作特殊功能寄存器上的bit位!
比如
&|
3&|5
0011
0101
先做或运算
0011|0101
=0111
在做与运算
0111&0101
=0101
这样3上的bit位0011就变成了0101!
小知识:
&,|,~,^属于双目运算符,位移<<,>>属于单目运算符。