c++ 表示无限大/小的方法(不引入其他头文件)

本文介绍了在C++中如何表示不同整型类型的无限大值(无符号类型的最大值)和无限小值(有符号类型的最小值),包括int、unsigned int、short和unsigned short。文中通过使用位操作和补码来避免引入额外的头文件,并提供了测试代码来验证结果。
摘要由CSDN通过智能技术生成

先写结论

#define MY_INT_MAX ( ~0u >> 1 )						//有符号整型的最大值
#define MY_UINT_MAX (~0)							//无符号整型的最大值
#define MY_SHORT_MAX ( (unsigned short)~0 >> 1 )	//有符号短整型的最大值 
#define MY_USHORT_MAX ( (short)~0 )					//无符号短整型的最大值

#define MY_INT_MIN (-MY_INT_MAX-1)					//有符号整型最小值, 或者 (1 << 31)
#define MY_SHORT_MIN (-MY_SHORT_MAX-1)				//有符号短整型最小值, 或者 (1 << 15)

正文

在刷leetcode的时候有一个需求,需要append一个代表无限大的数当作"哨兵节点", 于是在往上查询了一下, 有两个方法:

  1. 引入limits.h, 里面有各种不同类型的最大值对应的宏
  2. 直接数字表示, 例如0xFFFF或者65535代表unsigned short的最大值

其实也能用了, 不过我觉得会有敲错一个数字或者敲漏一个f的风险.
于是我想了下觉得利用"~"运算符取反其实还挺方便的.

int

最大值
是4字节*8位=32位, 直接打印了下~0, 结果为会把最后一位符号位的1也反转过来, 这很合理, 但是在做右移运算(~0 >>1)想把符号位的1去掉的时候, ~0代表32位全1, 由于默认是int类型, 恰好是1的补码, 即-1, -1右移还是-1,具体可以看下下面的链接 :

http://t.csdn.cn/zNAOT

所以应该来一个类型说明为无符号整型, 让最高位也能跟着一起右移, 那0后面跟个u就好了(~0u >> 1), 就是代表0x7FFF F

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值