元のタイプの変換を拡張して狭める
1831 ワード
元のタイプの変換、すなわちwidening and narrowing primitive conversionを拡張して狭める
byte回転charプロセスは、元のタイプの変換を広げ、狭めることである.byteはintに変換され、このintはcharに変換される.
変換プロセス:
1.intタイプ-1定数をbyte、すなわち0 xffに変換
2.byteはcharを回し、2つのステップを実行します.
1)byte回転int、すなわち0 xffffffff;
2)charに再変換し、高2バイト、0 xffffを遮断する.
3.intに変換すると65536が表示される
ここでは、狭い整形データから広い整形データへの変換規則、すなわち、最初の数値タイプがシンボルである場合、シンボル拡張を実行する比較的重要な変換規則に関する.charの場合、どのタイプに変換されるかにかかわらず、ゼロ拡張が実行されます.
byteからcharへの拡張プロセス:
1.シンボル拡張が発生しない場合
byte b = -1;
char c = (char)(b & 0xff);//すなわちbは当初のシンボルタイプのbyteではなく、以下と比較する.
2.シンボル拡張が発生する場合
byte b = -1;
char c = (char) b;//すなわちchar c=(char)(byte)bに等価である.すなわち、bにはシンボルタイプがある.
char回転int拡張プロセス:
1.シンボル拡張が発生しない場合:
int i=c&0 xffffまたはint i=c;//char自体は符号なしなので、ビット演算を行わなくてもいいです.
2.シンボル拡張を行うには:
int i = (short) c;//シンボル付きshortに変換してからintに変換します.
奥行き:http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html
byte回転charプロセスは、元のタイプの変換を広げ、狭めることである.byteはintに変換され、このintはcharに変換される.
System.out.println((int)(char)((byte)(int)-1)); //65535
System.out.println((int)(char)(byte)(-1&0xff)); //65535
System.out.println((int)(char)(-1&0xff)); //255
System.out.println((int)(short)(char)((byte)(int)-1)); //-1
//
System.out.println(Integer.toBinaryString(-1)); //11111111111111111111111111111111
BigInteger src = new BigInteger("ff",16); // , 10 ,2 ,16
System.out.println(src.toString()); //255
//char int
char x = (char)((byte)(int)-1);
int m = x;
System.out.println(m); //65535
int n = (short)x;
System.out.println(n); //-1
変換プロセス:
1.intタイプ-1定数をbyte、すなわち0 xffに変換
2.byteはcharを回し、2つのステップを実行します.
1)byte回転int、すなわち0 xffffffff;
2)charに再変換し、高2バイト、0 xffffを遮断する.
3.intに変換すると65536が表示される
ここでは、狭い整形データから広い整形データへの変換規則、すなわち、最初の数値タイプがシンボルである場合、シンボル拡張を実行する比較的重要な変換規則に関する.charの場合、どのタイプに変換されるかにかかわらず、ゼロ拡張が実行されます.
byteからcharへの拡張プロセス:
1.シンボル拡張が発生しない場合
byte b = -1;
char c = (char)(b & 0xff);//すなわちbは当初のシンボルタイプのbyteではなく、以下と比較する.
2.シンボル拡張が発生する場合
byte b = -1;
char c = (char) b;//すなわちchar c=(char)(byte)bに等価である.すなわち、bにはシンボルタイプがある.
char回転int拡張プロセス:
1.シンボル拡張が発生しない場合:
int i=c&0 xffffまたはint i=c;//char自体は符号なしなので、ビット演算を行わなくてもいいです.
2.シンボル拡張を行うには:
int i = (short) c;//シンボル付きshortに変換してからintに変換します.
奥行き:http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html