大小端存储、浮点数的存储、浮点数的大小比较,1月16日学习心得

一、大端存储与小端存储

大端存储(Big-Endian):最高有效字节(Most Significant Byte,MSB)被存储在最低的内存地址中,而最低有效字节(Least Significant Byte,LSB)被存储在最高的内存地址中。

数据的高位存储在内存的低地址,低位存储在内存的高地址。

 小端存储(Little-Endian):最低有效字节(LSB)被存储在最低的内存地址中,而最高有效字节(MSB)被存储在最高的内存地址中。

数据的高位存储在内存的高地址处,低位存储在内存的低地址处。

 int a =1,  a=0000 0001  ,其中1是低位。大小端存储、浮点数的存储、浮点数的大小比较,1月16日学习心得_第1张图片

用c语言验证设备的是大段存储还是小端存储。

//判断大小端
//假设右边是高地址,左边是低地址
int main()
{
	int a = 1; // 0x0000 0001
	//如果是大端 低位字节放到高地址,高位字节放到低地址
	//00 00 00 01
	//如果是小端 高位字节放到高地址,低位字节放到低地址
	//01 00 00 00
	char* p = (char*)&a; //字符指针只读1个字节,读8位
    //如果是大端存储,则p读取的值是0
    //如果是小端存储,则p读取的值是1
	if (*p == 1)
		printf("小端\n");
	else
		printf("大端\n");
	return 0;
}

此处引用http://t.csdnimg.cn/EFB1h 

二、小数如何存储到计算机中

在大多数计算机系统中,浮点数采用IEEE 754标准来表示。IEEE 754标准定义了两种常见的浮点数格式:float单精度(32位)和double双精度(64位)。

对于double型,它由32位二进制数表示,分为三个部分:符号位、指数位和尾数位。

  1. 符号位(1位):用来表示数的正负,0表示正数,1表示负数。

  2. 指数位(8位):用来表示数的指数部分。这是一个带符号的指数,并采用了移码的方式来表示。移码是通过将真实指数值加上一个偏置(偏移量)来表示的,偏置为2^(exponent bits - 1) - 1。例如,在单精度浮点数中,偏置为127。

  3. 尾数位(23位):用来表示数的尾数,即小数部分。大小端存储、浮点数的存储、浮点数的大小比较,1月16日学习心得_第2张图片

以 -6.25  为例

  1. 确定符号位:-6.25为负数,所以符号位为1。

  2. 将-3.75转化为二进制数:110.01

  3. 标准化:移动小数点,得到1.1001 × 2^2。

  4. 计算指数部分:2+ 偏置 = 2 + 127 = 129。转换为二进制为1000 0001。

  5. 将尾数移位:尾数部分为0.1001,移位为尾数部分的二进制表示。转换为二进制为0.10010000000000000000000。

  6. 将这些部分结合起来:符号位 + 指数部分 + 尾数部分。最终double型表示为:  1 10000001 10010000000000000000000。

三、浮点数的大小比较问题

大小端存储、浮点数的存储、浮点数的大小比较,1月16日学习心得_第3张图片

大小端存储、浮点数的存储、浮点数的大小比较,1月16日学习心得_第4张图片

有以上例子可以看出实数0.9的数据类型,计算机默认识别为double型

想要float b =0.9,b==0.9成立  需要在0.9后加上f, 即 0.9f 以此来统一精度。

123L  与 long int数据类型相同

*********************************************************************************

补充:

在终端使用命令 man ascii  即可查看 ascii表

大小端存储、浮点数的存储、浮点数的大小比较,1月16日学习心得_第5张图片

其中0~32为控制字符,输出时不可见,只会产生所对应效果。

‘0’~‘9’  48~57

‘A’~‘Z’  65~90       

字母大小写转换  加减32

‘a’~‘z’  97~122

Linux项目 初步idea:

巡检车.车机——> i.MX6ULL平台 ->  北斗api 获取位置 实时地图天气。

你可能感兴趣的:(开发语言)