当前位置: 技术问答>java相关
奇怪的问题,请进!!
来源: 互联网 发布时间:2015-05-16
本文导语: 数值类型里面,short是二字节的,byte是一字节的,也就是说两个byte可以转换为一个short而不会溢出。但我现在有个奇怪的问题: 如byte a 的8位全部为1,则第一位为符号位,即值为-128 同样如byte b 的8位全部为1...
数值类型里面,short是二字节的,byte是一字节的,也就是说两个byte可以转换为一个short而不会溢出。但我现在有个奇怪的问题:
如byte a 的8位全部为1,则第一位为符号位,即值为-128
同样如byte b 的8位全部为1,则第一位为符号位,即值为-128
又short c的16位全部为1的话,则第一位为符号位,即值为-32768
按理说将byte[] ab = new byte[2]//{byte a,byte b}转换为short后也应该是-32768,但我转后却发现结果为short d = -32640。
我以为我转错了,但是将d = -32640转为byte[]后仍然是两个-128
这是为什么?想不通它怎么会是-32640而不是-32768??
望大家指点迷津!!
如byte a 的8位全部为1,则第一位为符号位,即值为-128
同样如byte b 的8位全部为1,则第一位为符号位,即值为-128
又short c的16位全部为1的话,则第一位为符号位,即值为-32768
按理说将byte[] ab = new byte[2]//{byte a,byte b}转换为short后也应该是-32768,但我转后却发现结果为short d = -32640。
我以为我转错了,但是将d = -32640转为byte[]后仍然是两个-128
这是为什么?想不通它怎么会是-32640而不是-32768??
望大家指点迷津!!
|
给你两个转换的源码
class ShortToBytes {
public static byte[] shortToBytesWay(short s) {
byte[] buf = new byte[2];
buf[0] = (byte)((s >>> 8) & 0xFF);
buf[1] = (byte)(s & 0xFF);
return buf;
}
}
class BytesToShort {
public static short bytesToShortWay(byte[] source, int startPos, int byteLength) {
if(startPos
class ShortToBytes {
public static byte[] shortToBytesWay(short s) {
byte[] buf = new byte[2];
buf[0] = (byte)((s >>> 8) & 0xFF);
buf[1] = (byte)(s & 0xFF);
return buf;
}
}
class BytesToShort {
public static short bytesToShortWay(byte[] source, int startPos, int byteLength) {
if(startPos