java位运算实例详解——(&)、(|)、(~)、(^)、(<<)、(>>)

位运算种类

~:按位取反
&:位与
|:位或
^:异或
<<:左移
>>:右移
>>>:逻辑右移

注意这里没有<<<运算符

准备工作

位运算要求我们要把十进制转换成二进制来进行相关计算,

而且要知道计算机在算二级制数的时候,会把两数转换成补码来进行计算,结果也是以补码的形式存在的正数补码等于原码,负数补码等于原码的反码+1(这个很重要)

如果不了解原码反码补码请参考我的另一篇博客原码,反码补码详解

各运算符详解

(1)~:按位取反

举个例子~7

我们把7写成二进制就是:00000111

按位取反就是把0变成1,1变成0

即:
00000111
~
——————
11111000

既然是补码且最高位为1,那么结果必定为负数,那么就要把它变成原码再转换成十进制

要求原码先求反码(反码=补码-1)
即:
11111000
-1
——————
11110111

原码就为:
11110111
——————
10001000
符号位不变

最后把二进制转换成二进制就得到了-8

所以~7=-8;

(2)&:位于

举个例子5&(-7)

首先一样的把两者都写成二进制

5:00000101

-7:10000111

位于就是都为1则结果是1,其他情况都是0

由于-7需要转换成补码所以参与运算的实际上是11111001
即:
00000101
&
11111001
——————
00000001

补码结果是00000001为正数所以原码等于补码

故转换成十进制为:1

所以5&(-7)=1

(3)|:位或

举个例子6|4

化成二进制:

6:00000110

4:00000100

位或就是二者只要有一个为1结果就是1
即:
00000110
|
00000100
——————
00000110

补码结果是00000110为正数所以原码等于补码

转换成十进制为6

即6|4=6

(4)^:异或

举个例子8^(-3)

转化成二级制

8:00001000

-3:10000011

异或就是相同为0不同为1

-3参与运算的补码为11111101

即:
00001000
^
11111101
——————
11110101
补码为11110101

那么原码就是10001011

转换成十进制就为-11

即8^&(-3)=11

(6)<<:表示左移,不分正负数,低位补0

注:以下数据类型默认为byte为8位,左移时不管正负,低位补0

正数:r = 20 << 2

20的二进制补码:0001 0100

向左移动两位后:0101 0000

结果:r = 80

负数:r = -20 << 2

-20 的二进制原码 :1001 0100

-20 的二进制反码 :1110 1011

-20 的二进制补码 :1110 1100

左移两位后的补码:1011 0000

反码:1010 1111

原码:1101 0000

结果:r = -80

(7)>>: 表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

注:以下数据类型默认为byte为8位

正数:r = 20 >> 2

20的二进制补码:0001 0100

向右移动两位后:0000 0101

结果:r = 5

负数:r = -20 >> 2

-20 的二进制原码 :1001 0100

-20 的二进制反码 :1110 1011

-20 的二进制补码 :1110 1100

右移两位后的补码:1111 1011

反码:1111 1010

原码:1000 0101

结果:r = -5

(8)>>> 表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0

注:以下数据类型默认为int 32位

正数: r = 20 >>> 2

的结果与 r = 20 >> 2 相同;

负数: r = -20 >>> 2

-20原码:10000000 00000000 00000000 00010100

反码:11111111 11111111 11111111 11101011

补码:11111111 11111111 11111111 11101100

右移:00111111 11111111 11111111 11111011

结果:r = 1073741819

>>这里的-20要写成32位的而不写成8位,是因为上边写成8位和32结果没差别,博主为了使运算简洁就写成了8位但是这里的32位对结果都要影响所以就不能简写成8位
在这里插入图片描述

发布了37 篇原创文章 · 获赞 52 · 访问量 1791

猜你喜欢

转载自blog.csdn.net/qq_45737068/article/details/105214992