欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

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

发布时间:2024/7/23 c/c++ 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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 */

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

  • 正数用原码表示,如5 -> 0000 0101
  • 负数用补码表示,如-5->1111 1011
  • 补码:原码除符号位外,全部取反再加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

    创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

    总结

    以上是生活随笔为你收集整理的C++移位得到int型最大值的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。