位运算

 

位运算

 

首先

要明白位运算是在二进制中的运算方式,全部其余进制的数在进行位运算时都要先转化成二进制数再进行运算。
位运算主要包括按位与(&)、按位或(|)、按位异或(^)、取反( ~ )、左移(<<)、右移(>>)这几种。
其中除了取反( ~ )之外,其余的都是二目运算符,即要求运算符左右两侧均有一个运算量。markdown

补码

补码是为了表示一个负数的二进制形式。
其转化方式是先将负数当成正数转化成二进制的形式再将二进制正数的各个位上取反再加上一。ui

例如-5
先求出5的二进制数 : 0000 0000 0101
而后将各个位上0变1,1变0 : 1111 1111 1010
最后再加1 : 1111 1111 1011
这里5二进制下是101表示时前面全是0,这里省略就只写了几个意思一下^ _ ^spa

按位与(&)

运算的两个数,转换算为二进制后,进行与(&)运算。
当相应位上的数都是1时,该位取1,不然该为0。.net

例如5 & -5
5 : 0000 0000 0101
-5 :1111 1111 1011
答案 : 0000 0000 00013d

按位或(|)

运算的两个数,转换为二进制后,进行或(|)运算。
只要相应位上存在1,那么该位就取1,若是都不为1,就为0。blog

仍是5 | -5
0000 0000 0101
1111 1111 1011
能够看到每一位中其中一个都有1
答案 :1111 1111 1111token

按位异或(^)

运算的两个数,转换成二进制数后,进行异或(^)运算
若是相应位置上的数相同,该位取0,若是不一样改位取1。get

5 ^ -5
0000 0000 0101
1111 1111 1011
答案: 1111 1111 1110it

同时任何数异或0都是其自己,一个数若是异或本身则等于0
这样咱们能够用异或来交换两个数的值class

好比交换x,y的值
x ^= y; x = x ^ y
y ^= x; y = y ^ x ^ y
x ^= y; x = ( x ^ y ) ^ (y ^ x ^ y) ; --------- //最后一步 x ^= y 时 x = x ^ y; y = y ^ x ^ y

左移(<<)

将一个数二进制下的数向左移若干位,
好比 x << y 就是将二进制下的x 向左移 y 位

例 : 5 << 5
5 : 0000 0000 0101
5 << 5 : 0000 1010 0000
在10进制下就等于160

咱们能够思考一下,在十进制中,一个数每乘一次10就向左进一位。
那么在二进制中,同10进制同样,二进制中每乘一次2就向左进一位,
那么一个数左移x 就等价于一个数乘 2x

右移(>>)

将一个数在二进制下右移若干位
与左移用法相同

例 5 << 2
5:0000 0000 0101
5 << 2 : 0000 0000 0001
十进制下等于1

这里与左移相似,十进制下每除10整数位就退一位
那么右移就等价于除了几回2
同时右移运算是向下取整

取反(~)

其实在说补码的是后,取反就已经说了,就是将取反的数在二进制下的每一位取相反的数

5 : 0000 0000 0101
~5 : 1111 1111 1010

 


 

版权声明:本文为博主(BIGBIGPPT)原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处连接和本声明。

本文连接: https://blog.csdn.net/BIGBIGPPT/article/details/88919783
相关文章
相关标签/搜索