博客简介
本篇博客是计算机系统小班讨论内容之一,用于记录学习过程
- 分析代码
- 定义一个整型数组,输出 HNU!
分析代码
#include <stdio.h>
int main()
{
float a[3]={
1143139122437582505939828736.0,
76482007234779498639230238720.0,
9.222452464e-39};
printf("%d\n", sizeof(float));
printf("%s\n",a);
return 0;
}
规格化3个浮点数
- 1143139122437582505939828736.0
value=1143139122437582505939828736=
111011000110010101001000000000000000000000000000000000000000000000000000000000000000000000
=1.11011000110010101001*2^89
s=0
exp=89+127=1101 1000
frac=11011000110010101001000
value=01101100 01101100 01100101 01001000
- 76482007234779498639230238720.0
value=76482007234779498639230238720.0
111101110010000001101111000000000000000000000000000000000000000000000000000000000000000000000000
s=0
exp=95+127=1101 1110
frac=11101110010000001101111
value=01101111 01110111 00100000 01101111
- 9.222452464e-39
注意,这个数表示之后的阶码E=-127比最小规格化数的阶码-bit+1=-126还要小,所以他是一个非规格化数:
value=9.222452464e-39=0.000000000000000000000000000000000000009222452464
0.
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001000110110001110010000000000000101011110101000111
s=0
exp=
frac=11001000 11011000 11100100
value=0000000 01100100 01101100 01110010
查看内存
最后内存中存储的值就是:
转化为ascii码:
01001000 01100101 01101100 01101100 01101111 00100000 01110111 01101111
h e l l o space w o
01110010 01101100 01100100 00000000
r l d
我们发现将内存段分宜为ascii码之后的结果就是hello world
定义一个整型数组,输出 HNU!
将三个值翻译为ascii码
01001110 01001110 01010101 00100001
H N U !
用小端法表示并且转换为整数int
00100001 01010101 01001110 01001110
int=559,238,734
运行代码
#include <stdio.h>
int main()
{
int a[3]={559238734};
printf("%d\n", sizeof(int));
printf("%s\n",a);
return 0;
}