基本运算 : 1&1=1; 1&0=0; 0&1=0; 0&0=0;,我来为大家讲解一下关于二进制的算术运算?跟着小编一起来看一看吧!
二进制的算术运算
一、按位与( & ) :两位全为1,结果才为1基本运算 : 1&1=1; 1&0=0; 0&1=0; 0&0=0;
e.g.
51 & 5 = 0011 0011 & 0000 0101 = 0000 0001 = 1
特殊用法:
(1)清零:与0,结果为0;与1,不变
1011 0101 & 0000 1111 = 0000 0101 //高四位与0结果为0;低四位与1结果不变。
(2)取一个数的指定位。比如取(0101 1011)的高四位,只需与上(1111 0000)。
0101 1011 & 1111 0000 = 0101 0000 //保留高四位,清除低四位。
二、按位或( | ) :有一位为1,结果就是1基本运算 : 1|1=1; 1|0=1; 0|1=1; 0&0=0;
e.g.
51 | 5 = 0011 0011 | 0000 0101 = 0011 0111 = 55
特殊用法:
(1)置1:对某些位 置1。或0,不变,或1,结果就为1。
1011 0101 | 0000 1111 = 1011 1111 //高四位或0结果不变;低四位或1全为1(将后四位置1)
三、按位异或( ^ ) :相同为0,不同为1基本运算 : 1^1=0; 1^0=1; 0^1=1; 0^0=0;
e.g.
51 ^ 5 = 0011 0011 ^ 0000 0101 = 0011 0110 = 54
特殊用法:
(1)翻转:对某些位翻转。异或0,不变,异或1,结果就翻转。
1011 0101 ^ 0000 1111 = 1011 1010 //高四位异或0结果不变;低四位异或1结果翻转
(2)一个数,异或本身就等于0
(3)两个变量交换值的方法:
1:利用第三方变量 C=A; A=B; B=C
2:利用加减法实现 A=A B; B=A-B; A=A-B
3:利用异或运算 A=A^B; B=A^B; A=A^B
四、按位取反( ~ ) :1变0,0变1基本运算 : ~1=0; ~0=1;
e.g.
~51 = ~0011 0011 = 1100 1100 = 204
五、按位左移( << ) :左移若干位,左边丢弃(超过范围者丢弃),右边补0e.g.(java中整数是32位,没超过32位的都不应该丢弃)
正数:2 << 1 = 0010 << 1 = 0100 = 4 // 2左移1位
11 << 2 = 1011 << 2 = 0010 1100 = 44 // 没超过32位,因此左边不应该丢弃
负数:-14 << 2 首先,-14是带符号(正数最高位0,负数最高位1)的整数,因此-14 = (1000 1110)原 = (1111 0001)反 = (1111 0010)补(关于原码反码补码),计算机中用补码表示负数。
-14 << 2 = (1111 0010)补 << 2 = (11 1100 1000)补 = (10 0011 1000)原 = -56
六、按位右移( >> ) :右移若干位,正数左补0,负数左补1,右边丢弃e.g.
正数:4 >> 2 = 0100 >> 2 = 0001 = 1 //正数左补0
负数:-14 >> 2 首先,-14是带符号(正数最高位0,负数最高位1)的整数,因此-14 = (1000 1110)原 = (1111 0001)反 = (1111 0010)补(关于原码反码补码),计算机中用补码表示负数。
-14 >> 2 = (1111 0010)补 >> 2 = (1111 1100)补 = (1000 0100)原 = -4
七、无符号右移( >>> ) :右移若干位,左补0,右丢弃e.g.
-14 >>> 2 = 1111 1111 1111 1111 1111 1111 1111 0010 >>> 2 = 0011 1111 1111 1111 1111 111 1111 1100 = 1073741820