1.初認識JVM
3759 ワード
JVMの概念
省略する
JVM発展の歴史
省略する
JVM種類
省略する
Java言語仕様
主に文法、変数、タイプ、文法などの情報を定義します.
省略する
JVM仕様
主にClassファイルタイプ、ランタイムデータ、禎桟、仮想マシンの起動、仮想マシンの命令セットなどの情報を定義します
Java言語とJVMは相対的に独立している(以下の言語はすべてJVMを使用し、JVM仕様に合致する) Groovy Clojure Scala
1.整数の表現()原号:第1ビットは符号ビット(0は正数、1は負数) 反符号:符号ビット不動、原符号取反 負数符号:符号ビット不動、逆符号1 正数符号:原符号と同じ 印刷整数のバイナリ表示
2.なぜ補コードを使うのですか.曖昧な表現0(正数としても負数としても) がない.ソースコード計算は所望の結果を得ることが困難である.符号化演算、シンボルビットが演算に関与することで、正しい結果が得られる .
3.floatの表現と定義
詳細はこのフォルダの下のファイルを参照してください:floatの表示
s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
指数:8端数:23
e全0端数付加ビットが0でなければ端数付加ビットが1
s * m * 2^(e-127)
さぎょう補符号については、補符号の利点を簡単に述べる.-99,-105,205の整数を与える符号化 を計算する.
答え:a.曖昧な表現がなくても0を表すことができる.
b.原符号を用いた計算では所望の結果が得られない可能性があるが、補符号を用いてシンボルビットが演算に関与して正確な結果を得ることができる.浮動小数点数については、IEEE 745に従って、11000001000010000000000000の単精度浮動小数点の値を計算し、計算プロセスを与える.
答:式はs*m*2^(e-127)
3.Javaプログラムを書き、100.2をIEEE 745バイナリ表現に変換し、プログラムと結果を与える.
出力結果:
省略する
JVM発展の歴史
省略する
JVM種類
省略する
Java言語仕様
主に文法、変数、タイプ、文法などの情報を定義します.
省略する
JVM仕様
主にClassファイルタイプ、ランタイムデータ、禎桟、仮想マシンの起動、仮想マシンの命令セットなどの情報を定義します
Java言語とJVMは相対的に独立している(以下の言語はすべてJVMを使用し、JVM仕様に合致する)
1.整数の表現()
-6
: 10000110
: 11111001
: 11111010
-1
: 10000001
: 11111110
: 11111111
5
00000101
int a=-6;
for(int i=0;i<32;i++){
int t=(a & 0x80000000>>>i)>>>(31-i);
System.out.print(t);
}
2.なぜ補コードを使うのですか.
0
:00000000
:10000000
:11111111
:00000000
-6+5 -4+5
11111010 11111100
+ 00000101 + 00000101
= 11111111 = 00000001
3.floatの表現と定義
詳細はこのフォルダの下のファイルを参照してください:floatの表示
s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
指数:8端数:23
e全0端数付加ビットが0でなければ端数付加ビットが1
s * m * 2^(e-127)
さぎょう
答え:a.曖昧な表現がなくても0を表すことができる.
0
、 00000000
0
10000000
11111111
00000000
b.原符号を用いた計算では所望の結果が得られない可能性があるが、補符号を用いてシンボルビットが演算に関与して正確な結果を得ることができる.
-99 -105 205
1110,0011 1110,1001 0000,0000,1100,1101
1001,1100 1001,0110
1001,1101 1001,0111
答:式はs*m*2^(e-127)
e=1000,0010=2^1+2^7=130
m=1+2^-3=1.125
v=-2^(130-127) * 1.125=-9
3.Javaプログラムを書き、100.2をIEEE 745バイナリ表現に変換し、プログラムと結果を与える.
/**
* double IEEE745
* @param d
*/
public static void printDouble(double d){
//
StringBuilder dStr = new StringBuilder();
/* 1. d */
int integer = (int) d; //
double decimals = d - integer; //
System.out.println(" : " + decimals);
//
String integerStr = Integer.toBinaryString(integer);
//
StringBuilder decimalStr = new StringBuilder();
int count = 32; // 32
for (int i = 0; i < count; i++) {
decimals = decimals * 2;
if(decimals > 1){ // 1
decimalStr.append(1);
decimals -= 1;
}else{ // 0
decimalStr.append(0);
}
}
System.out.println(" : " + integerStr);
System.out.println(" : " + decimalStr);
/* 2. */
dStr.append(d > 0?0:1);
/* 3. */
/* 4. 127 e */
if(integer > 0){ // ,
//
int bit = integerStr.length() -1;
dStr.append(Integer.toBinaryString(bit + 127)); // e
decimalStr.insert(0, integerStr.substring(1)); //
}else{ // ,
//
}
// 5. 23 m
dStr.append(decimalStr.subSequence(0, 23)); // m
System.out.println("100.2 IEEE745 : " + dStr);
}
出力結果:
: 1100100
: 00110011001100110011001100110011
100.2 IEEE745 : 01000010110010000110011001100110