强制类型转换的原理

在c语言中,强制类型转换可以分为两种类型

1.对指针进行强制类型转换

int a = 1234567890;
float *f = (float *)&a;
printf("%f", *f);

2.对变量直接进行强制类型转换

int a = 1234567890;
float f = (float)a;
printf("%f", f);

 

这两种转换对于编译器来说有什么区别?

直接对变量进行类型强制转换时,编译器会

1)先将a的值1234567890当成整型数处理

2)然后将其按照浮点数的格式存储在内存中,可以看成当成1234567890.0,但是其在内存中存储的值已经被改变,现在内存中的值可以根据浮点数表示方法去进行计算;

3)最后将此值按照浮点数通过printf显示出来,即看到的1112539136.000000;

但是如果第一段代码中的方式,即:

1)先将保存整型数的地址转换成浮点数类型的地址,因为只对地址进行了类型转换,内存地址内保存的内容就仍然保持不变,仍然为1234567890;

2)然后编译器就会按照浮点数的存储格式解释内存值1234567890,其值恰好为1228890.250000;

3)最后通过printf将上述值显示出来;

 

【总结】:直接对数据进行强制转换时,会改变数据在内存中的存储格式,尤其浮点类型和整型数据之间的转换;

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值