大端小端,浮点数内存表示

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 *)&num;
	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以小端方式存放

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值