如何获得int型变量能存放的最大最小值

今天写了一个程序要用到int型的最大最小值,一时想不起来怎么实现,隐约记得用位运算可以实现但是自己试了好几个都不对,似乎什么取反加一规则在这里失效了。后来上网查了一下才知道是系统处理带符号数的取反运算时“有他自己的一套方法”。要把有符号数先转成无符号数再进行取反操作。下面是取得int型变量能存放的最大最小值的方法。
#include<iostream>
using namespace std;
int main()
{
	cout<<"IntMax="<<int(~((unsigned int)0)>>1)<<endl;
	cout<<"IntMin="<<~((int)(~((unsigned int)0)>>1))<<endl;
    return 0;
}

为了方便起见用00000来代表int型的0的二进制表示:


首先定义一个无符号整型的0:00000

取反:11111

右移一位:01111

转成int型即得到正的最大值


依然是无符号的0:00000

取反:11111

右移一位:01111

装换成有符号数再取反:110000(注意这里:系统对有符号数的取反过程实际上是先改变且只改变符号位,然后再直接加1)

然后就得到了int型的最小值


而事实上系统已经将这两个值定义好了他们分别用INT_MAX和INT_MIN代表

那么上面的代码就可以改成

#include<iostream>
using namespace std;
int main()
{
	cout<<"IntMax = "<<INT_MAX<<endl;
	cout<<"IntMin = "<<INT_MIN<<endl;
    return 0;
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值