3

以下のコードでは、次の列挙型を使用しています。

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()。166 ではなく -90 を返しています。これは私が期待しているものです。

FFFF FFFF FFFF FFA6 = -90 であることはわかっていますが、0xA6 が負の数として返されるのはなぜですか?

4

2 に答える 2

9

bytes の最大値は 127、最小値は -128 です。0xA6は 10 進数で 166 なので、オーバーフローがあります。

-128 + (166 - 127 - 1) == -90
于 2013-09-11T12:45:52.480 に答える
4

簡単な解決策は、最初からバイトにキャストしないことです。これにより、コードが単純になり、期待どおりの結果が得られます。

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

  private int code;

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

  public int getCode() {
    return code;
  }
}
于 2013-09-11T12:49:39.450 に答える