3

"byte FOO = 0xFE;" Java では動作しません。

"Cannot convert from into to byte"しかし、それはC++で動作します。これを解決するには?

4

2 に答える 2

8

値はin0xFEと同等であり、バイトの範囲内にないため、バイトに格納しようとしても、暗黙的な型キャストは行われません。バイト単位で対応するには、RHS値が範囲内にある必要があります。254int[-128 to 127]

または、コンパイラに明示的に保存するように指示することもできますexplicit typecasting

byte FOO = (byte)0xFE;

ただし、範囲に収まる値を格納する場合はbyte、明示的な型キャストは必要ありません。

byte FOO = 0x20;  // OK, can accommodate in byte.

型変換の詳細については、JLS-セクション#5.1を参照してください。

そしてJLS-具体的に議論するセクション#5.2Assignment Conversion

からのステートメントを引用するにはJLS:-

変数の型がbyte、short、またはcharであり、定数式の値が変数の型で表現できる場合は、ナローイングプリミティブ変換を使用できます。

于 2012-10-27T07:00:32.877 に答える
2

また:

long FOO = 0xFE; //Use long as type

また

byte FOO = (byte)0xFE; //Typecast to byte.

16進数を使用することにより、コンパイラーは、値がバイト[-128、127]の範囲内にあるかどうかを識別します。0xFEがより大きいため、または127を使用する必要があります。これは、の範囲外です。intlongbyte

あなたの例はナローイング変換と呼ばれています。

于 2012-10-27T06:59:54.673 に答える