浮点数,编译器位扩展

本文探讨了浮点数在计算机中的表示误差,通过FLT_EPSILON常量解释了为何即使赋值为0也可能存在极小误差。此外,还讨论了编译器在处理位字段时的位扩展现象,并给出了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

float会有误差,比如赋了float a=0;a是有可能是0.000000001的.

MSDN中定义了一个这样的值  
  FLT_EPSILON      1.192092896e-07F  

if(x > -0.000001 && x < 0.000001)


2.编译器位扩展

#ifndef HelloMac_Header_h
#define HelloMac_Header_h

typedef struct
{ 
    int a:2;
    int b:2;
    int c:1;
} test;


class DD
{
public:
    static void fun()
    {
        test t; 
        t.a  =  1; 
        t.b =  3; 
        t.c  = 1;
        
        printf("%d\n",t.a); 
        printf("%d\n",t.b); 
        printf("%d\n",t.c);
    }
};


#endif
输出为1,-1,-1。3个都是有符号数int。这是位扩展问题    
  01  
  11  
  1  
  ,编译器自动进行符号扩展。


3.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值