0x3f3f3f3f:理想的无穷大数

很多时候,我们都取0x7fffffff作为无穷大的代表,因为这是32-bit int的最大值。但是在更多的情况下,0x7fffffff并不是一个好的选择,它并不能满足“无穷大加一个有穷的数依然是无穷大”,它变成了一个很小的负数。除了要满足加上一个常数依然是无穷大之外,我们的常量还应该满足“无穷大加无穷大依然是无穷大”,这一点上0x7fffffff依然不能满足我们。另外它并不是真正意义上的无穷大数,也就是说,只要找到一个极大的数来代替它就行了。
而0x3f3f3f3f就很好的满足了这样的条件。
(1)0x3f3f3f3f的十进制是1061109567,也就是10^9 级别的(和0x7fffffff一个数量级),意味着它可以作为无穷大使用而不致出现数据大于无穷大的情形。
由于一般的数据都不会大于10^9,所以无穷大加上一个数据时并不会溢出。
(2)0x3f3f3f3f+0x3f3f3f3f<0x7fffffff,所以0x3f3f3f3f能够满足我们“无穷大加无穷大为无穷大”的需求。
(3)如果我们想要将某个数组全体赋值为零,我们可以用

memset(a,0,sizeof(a));

来实现,但当我们想将某个数组全部赋值为0x7fffffff时,就得自己写for循环了,因为memset是按字节操作的,它能够对数组清零是因为0的每个字节都是0,而0x3f3f3f3f的每个字节都是0x3f。所以

memset(a,0x3f,sizeof(a);

多么美妙。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值