2016-09-14 7 views
0

typeバイトは8ビットのメモリを占有し、char型は16ビットのメモリを占有しますが、charは符号なしであるため、byteからcharへの変換は狭くなります。これは、負の値を持つ型のバイトをcharに変換すると、負の値を失うため、情報が失われ、変換が狭くなっていることになります。byteからcharへの変換を狭くするJava

私はこれをJavaプログラムでテストしようとしています。

public class Test 
{ 
    public static void main (String[] args) 
    { 
    byte num = -1; 
    char test = (char)num; 
    System.out.println(test); 
    } 
} 

I試験を印刷する出力と予想:

1 

これはだろう-1負の符号なしcharが符号なしであるためです。これは実際に出力されます:

? 

私のプログラムには何か問題がありますか?

+1

ちょうどデバッガを使って、 'test'が何を含んでいるのか見てみると分かります。 – Tom

+1

https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.4。 –

+0

(重複した質問には、この変換時のアンダーフローも含まれています) – Tom

答えて

0

これは記号やcharの動作方法ではありません。 System.out.printlncharのためにあなたに(値の最初の8ビットのASCIIと同じである)UTF-8文字を表示することを念頭に置い

  1. ベア。したがって、System.out.println((char)71);は "G"を印刷します。だから、あなたが "1"が印刷されることを期待するとき、あなたが言っていることはあなたが(char)-1 == 41を期待しているということです。数値が必要な場合は、印刷する前に数値をintにキャストする必要があります。
  2. System.out.printlnsubstitute a question mark印刷不可能な文字の場合。
  3. byte~char最初にintに変換されます。 doc(Sotirios Delimanolisによってリンクされています)

まず、バイトプリミティブ変換(5.1.2)を拡大介しintに変換され、次いで得られたINTプリミティブ変換(5.1.3)を狭くしてチャーに変換されます。整数型Tへの符号付き整数の縮小変換は、単に、nは、型Tを表すために使用されるビット数であるnは最下位ビットが、すべてを破棄

関連する問題