C/C++整型与浮点型内存存储

浮点型:

   浮点型长度为32位(0-31);

   存储结构为 31(符号位) 30-23(小数点偏移位)22-0(有效位)

      例1: 10.3125 = 1010.0101 = 1.0100101 * 2^3

                1010.0101中整数位为1010,由十进制10转换为二进制得到

                                     小数位为0101,由下式得到。

          所以内存中为 0(符号位正)100 0010 1(127 + 3)010 0101 00...

                其中小数点偏移127 + 3 是因为小数点偏移可能向前也可能向后,根据标准127作为基准值。010 0101 00...由1.0100101得到,整数位固定为1,所以去掉整数位(精度可以由此提高一位)

                0100 0010 1010 0101 0000 0000 0000 0000求实际值

                        最高位为0表示 实际值为 +

                        10000101 表示 存储时小数点向前偏移了3位

                        010 0101 0000 0000 0000 0000 (>>3) 010. 0101 0000 0000 0000 0000

                       补上之前省略的整数位1得到1010. 0101 0000 0000 0000 0000

                        1010 计算整数位 10

                        0101 0000 0000 0000 0000 计算有效位 1/2^2 + 1/2^4 = 0.3125

                        得到实际值:10.3125

        注意有些值单精度浮点型并不能精确存储比如:125.24

 整型:

                

void t1() 
{
	int a = 0x12345678;//正数直接存储
	short b = a;
	std::cout << b << std::endl; //22136 0x5678

	unsigned short c = -100;
	std::cout << c << std::endl; //65436
	std::cout << (short)(c << 2) << std::endl; //-400 
    //负数以补码(反码(除符号位全部取反)+1)存于内存,读取时先-1,然后除符号位全部取反
	std::cout << (short)(c >> 2) << std::endl; //16359
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值