淘先锋技术网

首页 1 2 3 4 5 6 7

Java 位运算

前言

​ 最近在重学java基础,虽然自己本身是做android开发的。包括现在kotlin已经成为google推崇的第一编程语言。其实我认为kotlin更像是站在巨人的肩膀上开发,他从来不是为了取代java而出现的。因为kotlin文件最终也会编译成class文件,感觉自己越学越不会或者说是感觉现在不知道该学什么。所以现在打算重新学习,从Java基础开始。老话说的好“地基不牢,地动山摇”。越是学习越觉得应该返璞归真。

位运算

​ 虽然在开发中不经常使用位运算,但是在翻看源码的时候会时不时遇到:逻辑左移(<<)、逻辑右移(>>)、亦或(^)等。还是有必要了解一下的,特此记录学习过程。

运算符运算说明
<<左移将数化为二进制左移多少位后面补多少零=数*2^(多少位)
>>右移是负数移动位补1,正数移动位补0
>>>无符号右移移动多少位补多少0
&与运算两个数的二进制相应位都是1为1,否则是0
|或运算两个数有1为1,否则为0
^亦或运算两个数的二进制位相同为0,否则为1
~取反运算包括符号位在内逐位取反

说明:正数的原、反、补码是自己二进制本身。负数的反码是二进制除符号位外逐位取反、补码是在反码的基础上加1

1.左移

说明:左移动多少位,低位补多少个0。

例如:-15左移两位 -15 << 2

在这里插入图片描述

最后将1…111100换算成10进制得到-60

2.右移

说明:如果是负数,右移动多少位最高位补多少个1。如果是正数右移动多少位高位补多少0。

例如:-15右移两位 -15 >> 2

在这里插入图片描述

最后将1…0100换算成十进制得到-4

3.无符号右移动

说明:不管是正数还是负数移动多少位,高位就补多少个0。

例如:-15右移动两位 -15 >>> 2

在这里插入图片描述

这边是正数即位原码了,直接计算001111…1100得到结果:1073741820

4.与运算

说明:两个数的二进制相与都是1返回1,都是0返回0,不相同返回0

例如:-15&15

在这里插入图片描述

运算得到:1

5.或运算

有1则1

例如:-15|15

在这里插入图片描述

因为或运算得到的是负数再求原码得到:-1

6.亦或运算

说明:相同为0,不同为1

例如:-15^15

在这里插入图片描述

因为亦或运算后是负数再求原码得到:-2

7.取反运算

说明:包括符号位在内的1变0,0变1
在这里插入图片描述
因为取反后是负数再求得其原码得到:-16