105年普考程式設計概要
二、根據 IEEE 754 二進位浮點數算術標準,請問下列 C 語言程式碼執行後輸出為何?(25分) int main( ) { float A = 100; float B = -125.53125; printf("%08X\n", *(unsigned int *) &A); printf("%08X\n", *(unsigned int *) &B); } |
答:
IEEE 754-32bits格式:float
(-1)S×(1.M)2×2E-127
1 bit |
8 bit |
23 bit |
|
|
|
S |
E |
M |
S:Sign bit,用來表示浮點數的正負號。S = 0表示正,S = 1表示負。
E:Exponent,用來表示指數部份。
M:Mantissa 或 fraction,用來表示係數部份。
(一)&A
A = 100 = 110 01002。
100 = (-1)0×(1.1001)2×26
S = 0,M = 1001,E-127 = 6,E = 133 = 1000 01012。
1 bit |
8 bit |
23 bit |
0 |
10000101 |
10010000000000000000000 |
S |
E |
M |
二進位轉十六進位:
二進位 |
0100 |
0010 |
1100 |
1000 |
0000 |
0000 |
0000 |
0000 |
十六進位 |
4 |
2 |
C |
8 |
0 |
0 |
0 |
0 |
執行結果:42C80000。
(二)&B
B = -125.53125 = -1111101.100012。
0.53125
0.53125×2 = 1.0625,取整數1,然而去除1。
0.0625×2 = 0.125,取整數0。
0.125×2 = 0.25,取整數0。
0.25×2 = 0.5,取整數0。
0.5×2 = 1,取整數1,結束。
0.53125 = 0.100012。
1111101.10001
B = 1111101.100012 = (-1)1×(1.11110110001)2×26
S = 1,M = 11110110001,E-127 = 6,E = 133 = 1000 01012。
1 bit |
8 bit |
23 bit |
1 |
10000101 |
11110110001000000000000 |
S |
E |
M |
二進位轉十六進位:
二進位 |
1100 |
0010 |
1111 |
1011 |
0001 |
0000 |
0000 |
0000 |
十六進位 |
C |
2 |
F |
B |
1 |
0 |
0 |
0 |
執行結果:C2FB1000。