十六进制的枚举类型使用Java返回错误的值?

我在下面的代码中使用以下枚举类型:

public static enum PanelType
 {
   PAS8((byte)0xA6),PAS83((byte)0xA7);

  private byte code;

  private PanelType(byte code)
  {
   this.code=code;
  }

  public byte getCode(){
   return code;
  }
 }

但是,当我在我的方法中尝试使用它时:

for (PanelType type:PanelType.values())
 {
   if (decoded[3]==type.getCode())
   return type;
 }

我将返回:type.getCode()方法错误值.它返回-90而不是166,这正是我所期待的.

我知道FFFF FFFF FFFF FFA6 = -90,但为什么0xA6作为负数返回?

解决方法

bytes的最大值为127,最小值为-128. 0xA6是十进制的166,所以有一个溢出:

-128 + (166 - 127 - 1) == -90

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...