当前位置:首页 > c++ > 正文内容

为什么int的最大值是2147483647

xuwenyan8个月前 (07-29)c++474

如何得知int最大能存多大?

可以通过系统定义的宏INT_MAX得到int的最大值,代码如下:

int main() {
  std::cout << "int的最大值:" << INT_MAX << std::endl;
  system("pause");
  return 0;
}

image.png

我们可以看到最大值是2147483647,这是如何计算出来的?

为什么int的最大值是2147483647

已知,int占4个字节,而1个字节是8位

也就是说int占32位,而int是一个带符号的整数,需要留一位来作为符号位,那么实际int可以存放数字的就是31个bit

bit是二进制存储的,只能是1和0,要计算int的最大,只能假设int的31位都是1,因此计算出来最终结果是:2147483647。

image.png

看到这里,惯性思维会认为int的最小值是:-2147483647,然后实际上最小值是:-2147483648,这又是为什么?

为什么int的最小值是-2147483648

通过把2147483648转成2进制:

image.png

会发现符号位是1,其它全是0。因此猜想这可能是编译器的一个优化,这种情况下没有其它通途,就把它当作最小值,可以让最小值再小1。

于是搜索了一下大家的看法,和想的意思差不多,为了不浪费这个二进制数,所以把这个二进制数作为最小数。

参考如下:

int最小值为何是-2147483648,而不是-2147483647

为什么INT_MAX和INT_MIN的绝对值相差了1?

    文章作者:xuwenyan
    版权声明:本文为本站原创文章,转载请注明出处,非常感谢,如版权漏申明或您觉得任何有异议的地方欢迎与本站取得联系。

    扫描二维码推送至手机访问。

    版权声明:本文由艺文笔记发布,如需转载请注明出处。

    本文链接:https://www.xuwenyan.com/archives/2788

    标签: C++编程
    分享给朋友:

    “为什么int的最大值是2147483647” 的相关文章

    C++从dll导出lib

    C++从dll导出lib

    一、使用VC++的工具DUMPBIN将DLL中的导出函数表导出到一定义(.DEF)文件EXAMPLE: DUMPBIN VideoDeCoder.dll /EXPROTS /OUT:VideoDeCoder.def 二、将导出的.DEF文件整理为一符合.DEF个数的函数导出文件EX...

    C++如何实现窗口全屏显示

    C++如何实现窗口全屏显示

    窗口全屏,直接上代码:void FullScreen(HWND hwnd) {   //去掉所有边框,解决虚拟机win10任务栏显示问题   DWORD style = ::GetWindowLo...

    C++如何获取控制台程序的输出内容?

    C++如何获取控制台程序的输出内容?

    很多工具程序(如ffmpeg)的进度显示往往都是以控制台字符显示的方法,我们可能需要调用这种控制台工具去完成工作,但同时又希望以友好的ui界面去显示当前的工作状态(如进度)。此时我们能想到的就是运行控制台程序,然后以某种方式去获取到控制台程序的输出,然后转换到我们的ui界面上去显示。 有多种...

    VC的ATL工程向导同时生成一个PS工程是做什么的?可以不要吗?

    VC的ATL工程向导同时生成一个PS工程是做什么的?可以不要吗?

    例如,我用VC2015的工程向导新建一个ATL的工程名字叫myAtl,那么VC会同时给我生成一个叫做myAtlPS的工程。这个myAtlPS工程是做什么的?什么情况下可以不需要它?什么情况下它又是必须存在的? PS工程是什么?可以不要吗? 这个PS工程叫做代理与存根(proxy&nbs...

    解决程序在xp系统总是莫名奇妙的崩溃问题(/Zc:threadSafeInit- )

    解决程序在xp系统总是莫名奇妙的崩溃问题(/Zc:threadSafeInit- )

    现象:程序在xp系统上面总是莫名其妙的崩溃,检查代码看不出任何问题,感觉代码都很好。即使你远程调试,找到了崩溃的点,当你注释了崩溃点之后,还是会崩溃到别的地方。当你遇到了这种情况的时候,不妨参照一下下面的方法看看,说不定可以解决问题。如何解决?将崩溃程序相关的所有工程代码全部关闭全局变量的线程安全检...

    uafxcwd.lib(afxmem.obj) : error LNK2005:

    uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)"解决办法

    如果在编译MFC程序的时候出现下列及类似的错误: 1˃uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new...