在java中,任何的计算如果没有没有显式的数据类型转换,计算结果都会变成int类型
如下byte的计算
@Test
public void test6() {
byte b = 2;
System.out.println(b<<8);
System.out.println(b<<32);
}
输出结果:
512
2
也就是说,b移位的结果变成了int类型
char类型的计算
@Test
public void test6() {
char c = 2;
System.out.println(c<<16);
System.out.println(c<<32);
}
输出结果:
131072
2
总结:数据类型较int短的,也就是小于四字节的数据类型,计算结果就都为int类型
数据类型大于四字节的,就保持
int 和 long 类型转换
* int 转 byte
public static byte[] int2Byte(int number) {
byte[] b = new byte[4];
b[0] = (byte) (number >> 24);
b[1] = (byte) (number >> 16);
b[2] = (byte) (number >> 8);
b[3] = (byte)number;
return b;
}
* byte转int,和上面的int2byte对应
public static int byte2Int(byte[] b) {
int i3 = (b[0] & 0xFF)<< 24;
int i2 = (b[1] & 0xFF)<< 16;
int i1 = (b[2] & 0xFF)<< 8;
int i0 = b[3] & 0xFF;
return i3 | i2 | i1 | i0;
}
long 和 byte 类型转换代码
* long 转换成 byte[]
public byte[] long2Byte(long number) {
byte[] b = new byte[8];
for(int i=0; i<8; i++) {
b[i] = (byte) (number>>((8-i-1)*8));
}
return b;
}
* byte[] 转换成 long,第一种方式
public long byte2Long(byte[] b) {
long end = 0;
for(int i=0; i<8; i++) {
end = end | ((long)(b[i] & 0xff)<<((8-i-1)*8));
* 在这其中的b[i]必须加上一个类型转换,没有加上long类型计算结果就只会是int类型
}
return end;
}
* 第二种方式
public long byte2Long2(byte[] b){
long values = 0;
for (int i = 0; i < 8; i++) {
values <<= 8; values|= (b[i] & 0xff);
}
return values;
}
测试代码 long to byte
* 测试long到byte的转换,反转
@Test
public void test3() {
long n = 9000000000L;
byte[] b = long2Byte(n);
long number = byte2Long(b);
System.out.println(number);
long number2 = byte2Long2(b);
System.out.println(number2);
}
输出结果:
9000000000
9000000000