次のJavaコード行はエラーを生成します。
Javaのデータ型は署名されていますが?
char c = -128;
Charは、Javaで署名されていない1つのデータ型です。その16ビットの符号なし整数。
Javaデータ型のOracleチュートリアルから直接。
char
:char
データ型は単一の16ビットUnicode文字です。最小値'\u0000'
(または0)と最大値'\uffff'
(または65,535)があります。
これは、-128がintであるためです。あなたはcharにキャストする必要があります。charはunsigned型であることに注意してください。
char c = (char) -1;
System.out.print(Integer.valueOf(c).toString());
65535を取得します
の最小値'\u0000' (or 0)
との最大値があり'\uffff' (or 65,535 inclusive)
ます。
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
OracleJavaドキュメントによる
char:charデータ型は単一の16ビットUnicode文字です。最小値は「\u0000」(または0)、最大値は「\ uffff」(または65,535を含む)です。
char
したがって、実際に負の値を割り当てることはできずchar c = -128
、エラーが発生します。
charに負の値を割り当てて型キャストしようとすると、その値がもう一方の(最大)端を介してローテーションされます。
char c;
c = (char) 65; // 'A'
c = (char) -100; // 'ワ' and it results in 65,535(inclusive) - 100 = (char) 65,436
c = (char) 65436; // 'ワ'
int i;
i = (char) 65; // 65
i = (char) -1; // 65535 : notice how the char value cycles through the other end
i = (char) -100; // 65436 : same as (char) -100. Here, int returns 65,436.
プリミティブの最小値または最大値について混乱した場合は、同等のオブジェクトを見つけて、MIN_VALUEまたはMAX_VALUE定数を探してください。例えば:
http://docs.oracle.com/javase/6/docs/api/java/lang/Character.html#MIN_VALUE
キャスト:
char c = (char) -128;
これはおそらくあなたが期待するように動作しないでしょうが。おそらく1バイトの方が良いでしょうか?
charは16ビットの符号なしの値を保持します.charに整数を割り当てることができますが、2までの正の値は、0から開始するときに65536-1である16の累乗になります。
-ve値を割り当てる必要がある場合は、ビットの一部が緩んで型キャストする必要があります。この状況では、コンパイラは符号ビットを実際の値と一緒に格納し、最後のビットは削除されます。char c =(char)-128はコンパイルエラーを発生させませんが、ばかげた結果が得られます
Character.isValidCodePoint(int codePoint)
次のメソッドを使用して、int値が文字コードとして有効かどうかを確認することもできます。
boolean isValid = Character.isValidCodePoint(-128); // false