C/C++,用0x3f3f3f3f表示无穷大,0xc0c0c0c0表示无穷小

#include <iostream>

#define MaxN  0x3f3f3f3f
#define MinN  0xc0c0c0c0

int main(void)
{
    printf("%d %d\n",MaxN,MinN);
    //1061109567, -1061109568
    return 0;
}
#include <stdio.h>
#include <iostream>

#define MaxN  0x3f3f3f3f
#define MinN  0xc0c0c0c0

int main(void)
{
    int b=MinN;
    printf("%d %d %d\n\n",MaxN,MinN,b);
    //1061109567 -1061109568 -1061109568

    int a1 = MaxN;
    int b1= MinN;
    unsigned int a2 = MaxN;
    unsigned int b2 = MinN;
    long long a3 = MaxN;
    long long b3 = MinN;

    printf("a1 = %d  b1 = %d\n",a1,b1);
    printf("a2 = %d  b2 = %d\n",a2,b2);
    //注意 b3=%lld,两个l,否则,用%d或%ld都会导致其他都可能错误
    printf("a3 = %lld  b3 = %lld\n\n",a3,b3);
    //a1 = 1061109567  b1 = -1061109568
    //a2 = 1061109567  b2 = -1061109568
    //a3 = 1061109567  b3 = 3233857728  

    //看这里,b1=0. b3=-1061109568,就因为a3用的是%ld%
    printf("a1 = %d  a2 = %d  a3 = %ld\nb1 = %d  b2 = %d  b3 = %ld\n\n",a1,a2,a3,b1,b2,b3);
    //a1 = 1061109567  a2 = 1061109567  a3 = 1061109567
    //b1 = 0  b2 = -1061109568  b3 = -1061109568
    printf("a1 = %d  a2 = %d  a3 = %d\nb1 = %d  b2 = %d  b3 = %lld\n\n",a1,a2,a3,b1,b2,b3);
    //a1 = 1061109567  a2 = 1061109567  a3 = 1061109567
    //b1 = 0  b2 = -1061109568  b3 = -4557430888798830400


    //这样是不是靠谱多了
    std::cout <<"a1=" <<a1 <<" a2=" << a2 << " a3=" << a3 << std::endl;
    std::cout <<"b1=" <<b1 <<" b2=" << b2 << " b3=" << b3 << std::endl;
    //a1=1061109567 a2=1061109567 a3=1061109567
    //b1=-1061109568 b2=3233857728 b3=3233857728


    return 0;
}

从上面可以看出,不管哪种情况,0x3f3f3f3f都没变,但是0xc0c0c0c0表示无穷小却会出问题。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值