1.
设数据为01020304H,在内存中以如下方式表示为大端(高数据字节放低地址,反之为小端)。
01 02 03 04
低地址---------------------------------->高地址
2.
float IEEE标准是:(尾符1位)+(阶码8位)+(23位尾数)
<1>:阶码8位从-127~128,但实际上是把每个初始阶码加上127改为从0~255,输出是减去127.
<2>:假设数为0.101,先改为1.01保持整数位为1(规定),但尾数中把1隐藏了不存储,尾数为01,只是在输出是在加上1,23位实际是24了。
1.测试pc大端还是小端
#include<iostream>
using namespace std;
int main() {
//字符串
const char *p1 = "CU AND ALU";
for (int i = 0; i < 10; ++i)
cout << p1[i];
cout << endl;
//整数
long long int i = 0x0102030405060708;
char *p2 = (char *)&i;//char和int指针指向同一个内存单元,但位移量不同
for (int i = 0; i < 8; ++i)
cout << (int)p2[i] << ' ';
cin.get();
return 0;
}
---------------output
CU AND ALU
8 7 6 5 4 3 2 1
Conclusion:字符串以大端方式存放,整数以小端方式存放。
2.查看浮点数在内存中的形式。
#include<iostream>
using namespace std;
int main() {
float num = 1.0;
char*p = (char *)#
cout <<(int)p[2]<<endl;
printf("1.0的存储格式:%x %x %x %x\n", p[0], p[1], p[2], p[3]);
num = 0.625;
printf("0.625的存储格式:%x %x %x %x\n", p[0], p[1], p[2], p[3]);
cin.get();
return 0;
}
--------------------------output
-128
1.0的存储格式:0 0 ffffff80 3f
0.625的存储格式:0 0 20 3f
Conclusion:
<1>:1.0的输出中出现ffffff80,并不是一个字节,推测是在char以16进制输出时,会拓展为4个字节,高位按符号位填充,故全1.
<2>:0.625D=0.101B=1.01*e-1(隐藏位为1),尾数为01,阶码为-1+127=126
即:3f,20,00,00H,输出结果为0 0 20 3f,说明float以小端方式存放