2021-11-26 float 和int 的原反补

int main() {
    int number = 9;
    printf("%d\n", number);
    float* n = (float*)&number;
    printf("%f\n", n);

    *n = 9.0;
    printf("%d\n", number);
    return 0;
}

 

 同样是打印number ,以整形的形式打印出来和以浮点型的形式打印出来却截然不同,这就要涉及到数据在内存中储存的问题了。首先我们来看int number 和 float n 的原反补:

number的原反补都一样:00000000 00000000 00000000 00001001

浮点型在内存中的存储和整形不一样,n是这样表示的:(-1)^(0)*1.001*2^(126-126)。这是因为用二进制科学计数法表示,-1的0次方表示是整数,1次方就是负数,然后划到整形一样的二进制里就是:

正负位  2的几次方           有效位

0 00000000 000 0000 0000 0000 0000 1001

所以打印出来的数很小,0.0000000-》因为*2的-126次方了。

而在赋值9.0给n后,打印出来number的值有不一样了,我们来看:

9.0以浮点数打印应该是(-1)^(0)*1.001*2^(3 + 130)

0 10000010 001 0000 0000 0000 0000 0000

01000001000100000000000000000000

所以打印出来的数很大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值