C语言强制类型转换

C语言强制类型转换

记录下自己学习笔记

int main()
{int a = 123456789;
    float f = 123456789.0;
    double b = (double)a;
    float *c = (float *)&a;

    /*注意以上两个强制类型转换的区别
    第一个直接对内存对象强制类型转换,
    编译器会先将123456789转换为123456789.0(即相当于创建了中间变量 temp = 123456789.0)
    然后将其以浮点数的类型存储到内存中(即double b = temp)

    第二个只是用float类型指针指向内存区域
    c指向的内存中仍是以整数形式存储的,
    若采用printf输出,则按照原内存中形式直接采用浮点数格式进行输出

    */
    printf("%x\n",&a);
    printf("%x\n",c);
    printf("%lf\n",b);
    printf("%f\n", *c);
    printf("%f",f);
    /*
    float和double的精度是由尾数的位数来决定的。
    浮点数在内存中是按科学计数法来存储的,
    其整数部分始终是一个隐含着的“1”,由于它是不变的,
    故不能对精度造成影响。float:2^23 = 8388608,一共七位,
    这意味着最多能有7位有效数字,但绝对能保证的为6位,
    也即float的精度为6~7位有效数字;
    double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

    注:float: 1符号位 23尾数 8指数,其中尾数表示有效数字
    double同理
    */
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值