![e68c5fd0ea48a766bab068f9edf465c8.png](https://i-blog.csdnimg.cn/blog_migrate/d94a2d8046a8ef7d72f94f3741b8ac15.jpeg)
前言
之前了解过位运算符,左移<<
等于乘以2,右移>>
等于除以2。但是我在看jdk源码的时候发现了一个>>>
三个符号的,不明白这是什么意思,就去搜了一下,发现还挺多的知识点的,就整理了一下。
首先我们知道,我们编写的程序最终都是在计算机底层进行的,计算机底层也仅支持0、1两种符号。所以当时网上有个键盘只有0、1两个键,那才是大佬用的键盘。扯远了。。。
先来复习一下java的基本类型都占多少字节,占多少位(1字节等于8位):
类型
字节数
位数
大小范围
byte
1
8
-2^8^~2^8^-1
short
2
16
-2^16^~2^16^-1
int
4
32
-2^32^~2^32^-1
long
8
64
-2^64^~2^64^-1
float
4
double
8
char
2
16
一个char类型可以存储一个汉字
boolean
1
true or false
移位操作是把数据看作二进制数,然后将其向左或向右移动若干位的运算。在Java中,移位操作符包含三种:<<
左移运算符,>>
带符号右移运算符,>>>
无符号右移运算符。这三种操作符都只能作用于long
,int
,short
,byte
这四种基本整形类型上和char
类型上。其他类型如double都无法使用位运算符,大家可以在ide中自行试验一下。
在java中,第一位用来表示数字的正负,第一位为零时表示正数,第一位为1时表示负数。我们拿最简单的8位byte类型举例:0000 0000
表示0,0111 1111
这个表示最大值(2^8^-1),再进行加一后就变成了1000 0000
这时就变成了最小值(-2^8^)。再加一后变成1000 0001
这时的值为-127。也就是从0到最大值然后转为最小值,然后再从最小值向零靠近。
左移操作符<<
左移操作符<<
是将数据转换为二进制后,向左移动若干位,高位丢弃,低位补零。
首先我们可以利用java中的方法获取一个数的二进制:Integer.toBinaryString(int val)
。
然后我们看下面这个例子: