一、基本数据类型的字节
以10为例:
int类型的10其实就是在前面补0,补齐4个字节,32个bit位,其他类型也是这样。
二、类型转换
- 隐式转换(小变大 前面补0)
public class Test{
public static void main(String[] args){
byte a=10; //0000 1010
int b=a;//0000 0000 0000 0000 0000 0000 0000 1010
System.out.println(b);
}
}
输出结果:10
- 强制转换
public class Test{
public static void main(String[] args){
int a=300; //0000 0000 0000 0000 0000 0001 0010 1100
//超过了byte的取值范围
//去掉前面24个bit
byte b=(byte)a;//0010 1100
System.out.println(b);
}
}
输出结果:44
public class Test{
public static void main(String[] args){
int a=200; //0000 0000 0000 0000 0000 0000 1100 1000
byte b=(byte)a;//1100 1000 (第一个是符号位)
//计算机中,数字的运算和存储都是以补码的形式进行的,所以
//1100 1000是补码形式
System.out.println(b);
//Java运行时会把结果转换成十进制的表现形式
}
}
输出结果:-56
//
ps:补码-1,按符号位取反就是原码
//
三、其他运算符
- 逻辑与(都为true结果才为true)
这里的&运算符左右都是一些数字
- 逻辑或(有一个true结果就是true)
- 左移(把二进制的补码向左移动,低位补0)
这里移出去的那两位0就舍去了
规律:左移n次就乘以2的n次方 - 右移(如果原来是负数就补1,反之补0)
规律:右移n次就除以2的n次方 - 无符号右移(和右移差不多,区别是全补0)