基本运算 : 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

五、按位左移( << ) :左移若干位,左边丢弃(超过范围者丢弃),右边补0

e.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