5

大文字リテラルと小文字リテラルの両方で同じ結果が得られるのはなぜですか? 例えば:

char ch1 = 'A';
char ch2 = 'a';
char ch3 = 'Z';
char ch4 = 'z';

print("ch1 -- > " + Integer.toBinaryString(Character.getNumericValue(ch1)));
print("ch2 -- > " + Integer.toBinaryString(Character.getNumericValue(ch2)));
print("ch3 -- > " + Integer.toBinaryString(Character.getNumericValue(ch3)));
print("ch4 -- > " + Integer.toBinaryString(Character.getNumericValue(ch4)));

結果として私は得る:

ch1 -- > 1010
ch2 -- > 1010
ch3 -- > 100011
ch4 -- > 100011

そして、「A」と「a」の違いがよくわかりません。文字リテラルを UTF 形式 (「A」の場合は \u0041、「a」の場合は \u0061) を使用しても、同じ結果が得られます。

4

2 に答える 2

7

文書化されているとおりに動作しています:

大文字 ('\u0041' から '\u005A')、小文字 ('\u0061' から '\u007A')、および全角変形 ('\uFF21' から '\uFF3A' および '\uFF41') の A ~ Z の文字'\uFF5A' まで) フォームには 10 から 35 までの数値があります。

基本的に、これは 16 進数 (たとえば) を解析するときに0xfa == 0xFA、期待どおりであることを意味します。

base64のようなものを使用する場合にのみ、大文字と小文字が重要になると思います。

于 2012-12-05T07:02:35.663 に答える
4

解説から判断すると、実際には数値ではなく文字のコードポイントを探しているので、それを答えに分離します。このgetNumericValue()関数は、グリフを解釈するときに文字の意味を数値として返します。文字のコードポイントは返しません。たとえば、 のコードポイントではなく、getNumericValue('5')として 5 を返します。int5

コードポイントを使用するには、変数または char リテラルをそのまま使用します。char数値データ型です。たとえばSystem.out.println((int)'a');、非常に単純に 65 を出力します。

于 2012-12-05T07:18:56.567 に答える