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
*/

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

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

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

猜你喜欢

转载自blog.csdn.net/u010551600/article/details/80882244