1、补码
十进制转换为二进制需要除2取余,将十进制负整数转换为二进制可以先按照正数转换,然后取反加1
十进制10的二进制表示
0000 0000 0000 1010
取反后
1111 1111 1111 0101
加1
1111 1111 1111 0110
2、按位与(&)
参加运算的两个数换算成二进制后,进行位运算,相应位都为1时取1,否则取0
将10与-10进行按位与运算
0000 0000 0000 1010
1111 1111 1111 0110
-------------------
0000 0000 0000 0010
所以10&-10=0000 0000 0000 0010
3、按位或(|)
参加运算的两个数换算成二进制后,进行位运算,相应位只要存在1时取1,全为0取0
将10与-10进行按位或运算
0000 0000 0000 1010
1111 1111 1111 0110
-------------------
1111 1111 1111 1110
所以10|-10 = 1111 1111 1111 1110
4、按位异或(^)
参加运算的两个数换算成二进制后,进行位运算,相应位不相同取1,相同取0
将10与-10进行按位异或运算
0000 0000 0000 1010
1111 1111 1111 0110
-------------------
1111 1111 1111 1100
所以10^-10 = 1111 1111 1111 1100
任何数与0异或都是其本身,利用异或可以实现一个交换算法,用于交换两个数
a = a^b;
b = b^a;
a = a^b;
5、取反(~)
将二进制的数取反即将各个位的值取反,0变1,1变0
对10进行取反运算
0000 0000 0000 1010
-------------------
1111 1111 1111 0101
所以~10 = 1111 1111 1111 0101
6、左移(<<)
将二进制的数进行左移运算是将各个位向左移动若干位,在后面补0
对10左移2位
0000 0000 0000 1010
-------------------
0000 0000 0010 1000
所以10<<2 = 0000 0000 0010 1000=40
可以观察得到,二进制数左移一位即原10进制数乘以2,左移两位是乘以4
7 右移(>>)
将二进制的数进行左移运算是将各个位向右移动若干位,在左面补0可以
对10右移2位
0000 0000 0000 1010
-------------------
0000 0000 0010 0010
所以10>>2 = 0000 0000 0000 0010=2
观察得到,二进制数右移一位即原10进制数除以2,右移两位是除以4 ,注意是去掉小数位,即向下取整
参考:https://blog.csdn.net/mengzhengjie/article/details/80611422