C++移位得到int型最大值

C++里默认int型1的二进制表示为:

0000 0000 0000 0000 0000 0000 0000 0001

如果左移31位,会得到最小值

1<<31 //会得到-2147483648,即int型最小值

1000 0000 0000 0000 0000 0000 0000 0000

因为int类型是有符号的,第一位为符号位,如果是1表示负数,为什么1<<31 会得到最小值,因为int是使用补码表示的。如果我们想得到最大值可以使用如下代码:

cout << (1<<31)-1 << endl;//有符号int最大值
/*输出得到:
2147483647
*/

补码部分概念:
负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的。
计算机中:

  1. 正数用原码表示,如5 -> 0000 0101
  2. 负数用补码表示,如-5->1111 1011
  3. 补码:原码除符号位外,全部取反再加1,-5的原码为1000 0101,符号位外取反加1为1111 1011

原码和反码表示的0有两种形式+0和-0,而我们知道,+0和-0是相同的。
这样,8位的原码和反码表示的整数的范围就是-127+127(1111111101111111),而采用补码表示的时候,00000000是+0, 即0;
10000000不再是-0,而是-128,这样,补码表示的数的范围就是-128~+127了,不但增加了一个数得表示范围,而且还保证了0编码的唯一性。

转载自:
https://segmentfault.com/q/1010000006201661?_ea=1048818
https://blog.csdn.net/studyvcmfc/article/details/7605752

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值