加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

计算C程序中的最大int值(1 << 31) - 1

发布时间:2020-12-16 10:33:44 所属栏目:百科 来源:网络整理
导读:用 gcc(4.6.3)编译它不会产生警告,结果产生-2147483648. printf ("%d",(131)); 编译它会产生“警告:表达式中的整数溢出[-Woverflow]”并生成2147483647作为结果. printf ("%d". (131)-1); 我很困惑为什么第二个表达式给出整数溢出警告. 解决方法 尽管对于带
用 gcc(4.6.3)编译它不会产生警告,结果产生-2147483648.

printf ("%d",(1<<31));

编译它会产生“警告:表达式中的整数溢出[-Woverflow]”并生成2147483647作为结果.

printf ("%d". (1<<31)-1);

我很困惑为什么第二个表达式给出整数溢出警告.

解决方法

尽管对于带符号的32位整数,1 <<< 31可以说是未定义的行为,但它通常导致最大负32位2的补码整数值(0x80000000 = -2147483648).如果您尝试从此值中减去1,则值下溢并成为最大正值,因此编译器警告.

1<<31      0x80000000                -2147483648
(1<<31)-1   0x80000000-1 = 0x7fffffff  2147483647

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读