整形和浮点型在内存中的存储形式

(该文章是在使用qt udp传输时接收情况) 

1.整形(short为例)

short是2字节,1字节是8bit,

例如short  a = 1;

a通过udp传输,通过网络助手接到的情况:01 00

因为时小端发送,所以低字节在低位,高字节在高位,所以读取时需要转换即为:00 01

因为是16进制,转换二进制:0000 0000 0000 0001.。

2.浮点型(与整形不同)(IEEE标准)

float

float是4字节

float b = 8;

b通过udp传输,通过网络助手接到的情况:00 00 00 41

因为是小端发送,所以低字节在低位,高字节在高位,

所以读取时需要转换即为:41 00 00 00 

16进制转换二进制:0100 0001 0000 0000

第一个0是符号(0正,1负)    之后100 0001 0      是指数(8位),转换为10进制为128+2 = 130;

根据IEEE标准单精度浮点数偏差需要减去127 所以130-127 = 3;(指数)

之后的 000 0000   根据IEEE标准的形式是1.0000000,该数小数点向有移动“指数”的个数,

即1000.0000,所以1000的二进制转换为十进制是8,.0000这些是小数部分。

double

和float思路一样,不过是指数的位数不同

double是8字节

double c  =7 ;

c通过udp传输,通过网络助手接到的情况:00 00 00 00 00 00 1C 40

因为是小端发送,所以低字节在低位,高字节在高位,

所以读取时需要转换即为:40 1C 00 00 00 00 00 00 

16进制转换二进制:0100 0000 0001 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

第一个0是符号(0正,1负)    之后100 0000 0001  是指数(11位),转换为十进制1024+1=1025;

根据IEEE标准双精度浮点数偏差需要减去1023 所以1025-1023 = 2;(指数)

之后的 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000   

根据IEEE标准的形式是1.1100 0000 0000 0000 0000 0000 0000 0000 0000 0000,该数小数点向有移动“指数”的个数,

即111.00 0000 0000 0000 0000 0000 0000 0000 0000 0000,所以111二进制转换为十进制位7,

.00 0000 0000 0000 0000 0000 0000 0000 0000 0000为小数部分。

浮点型数据在内存存储方式是按照IEEE 754标准进行存储的。IEEE 754标准规定了两种浮点数的表示方法:单精度浮点数和双精度浮点数。其,单精度浮点数占用4个字节,双精度浮点数占用8个字节。 在IEEE 754标准,浮点数的存储格式由三部分组成:符号位、指数位和尾数位。其,符号位用来表示浮点数的正负,指数位用来表示浮点数的数量级,尾数位用来表示浮点数的精度。 具体来说,单精度浮点数的存储格式如下所示: | 31 | 30 - 23 | 22 - 0 | |----|---------|--------| | S | E | M | 其,S表示符号位,占用1个bit;E表示指数位,占用8个bit;M表示尾数位,占用23个bit。双精度浮点数的存储格式类似,只是指数位和尾数位的长度不同。 在计算机,浮点数的存储方式是按照二进制补码进行存储的。具体来说,符号位用0表示正数,用1表示负数;指数位和尾数位都用二进制补码表示。 举个例子,如果要将3.14这个单精度浮点数存储到计算机,首先需要将3.14转换成二进制数。具体来说,可以使用以下方法进行转换: 3.14 = 11.0010001111...(二进制) 然后,根据IEEE 754标准的规定,将上述二进制数按照符号位、指数位和尾数位的顺序存储到计算机。具体来说,可以将上述二进制数转换成以下形式: | 0 | 10000000 | 10001100100011110101110 | |---|----------|------------------------| | S | E | M | 其,符号位S为0,表示正数;指数位E为10000000,表示指数为128(因为E需要加上一个固定的偏移量127,才能表示实际的指数值);尾数位M为10001100100011110101110,表示尾数为1.5707964(因为M需要除以2的23次方,才能表示实际的尾数值)。 因此,3.14这个单精度浮点数在计算机存储方式为: 01000000000100110010001111010111
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值