之前先回顾基础知识
1、字节:byte:用来计量储存容量的计量单位;位:bit
2、1 byte = 8 bit
3、Byte 是byte的封装类,如同Integer 和 int
4、各种类型占用的字节数
整形
byte:1个字节 8位 -128~127
short :2个字节 16位
int :4个字节 32位
long:8个字节 64位
浮点型
float:4个字节 32 位
double :8个字节 64位
char类型:
char:2个字节。
Boolean 类型
boolean: (true or false)(并未指明是多少字节 1字节 1位 4字节)
下面是位运算
1、^ 异或 二进制 相同为0,不同为1
System.out.println("4^3运算的结果是 :"+(4^3));
//打印的结果是: 4^3运算的结果是 :7
// 4:0000 0000 0000 0000 0000 0000 0000 0100
// 3:0000 0000 0000 0000 0000 0000 0000 0011 相同就为0 不同就位1
2、& 与 二进制 只要有一个为0 就为0
System.out.println("4&3运算的结果是 :"+(4&3));
//打印的结果是: 4&3运算的结果是 :0
// 4:0000 0000 0000 0000 0000 0000 0000 0100
// 3:0000 0000 0000 0000 0000 0000 0000 0011 只要有一个为0 就为0 ,必须同时为1 时才为 1
3、<<左移 二进制 后面补0
System.out.println("2<<3运算的结果是 :"+(2<<3));
//打印的结果是: 2<<3运算的结果是 :16
//2 :0000 0000 0000 0000 0000 0000 0000 0010 向左移三位 0001 0000 每左移一位 相当于乘2
System.out.println("-2<<运算结果"+(-2<<3));
//-2 :1111 1111 1111 1111 1111 1111 1111 1101 反码
// 1111 1111 1111 1111 1111 1111 1111 1110 补码
// 1111 1111 1111 1111 1111 1111 1111 0000 左移三位
// 1111 1111 1111 1111 1111 1111 1110 1111 反码
// 0000 0000 0000 0000 0000 0000 0001 0000 源码
4、>> 右移 ,>> 无符号右移
System.out.println("-2>>>3运算的结果是 :"+((byte)-2>>>3));
//打印的结果是: -2>>>3运算的结果是 :536870911
//2 :0000 0000 0000 0000 0000 0000 0000 0010 向右移三位0000 0000 0000 0000 0000 0000 0000 0000 每右移一位 相当于除2
//-2 :1111 1111 1111 1111 1111 1111 1111 1110 0001 1111 1111 1111 1111 1111 1111 1111
10进制转二进制的时候,因为二进制数一般分8位、 16位、32位以及64位 表示一个十进制数,所以在转换过程中,最高位会补零。
在计算机中负数采用二进制的补码表示,10进制转为二进制得到的是源码,将源码按位取反得到的是反码,反码加1得到补码
二进制的最高位是符号位,0表示正,1表示负。
>>>与>>唯一的不同是它无论原来的最左边是什么数,统统都用0填充。
——比如,byte是8位的,-1表示为byte型是11111111(补码表示法)
b>>>4就是无符号右移4位,即00001111,这样结果就是15。
可见正数做>>>运算的时候和>>是一样的。区别在于负数运算