汇编出错 2022-01-10 16:08 采纳率: 100%
浏览 53
已结题

int类型最大值问题。

Win7(64位)+Code::Blocks17.12环境下。下面两段代码的差别是什么?

void main()
{
    int a;
    a=2147483647+1;
}
void main()
{
    int a;
    a=2147483648;
}

为什么第一段编译时提示溢出错误,第二段却编译正确。

  • 写回答

4条回答 默认 最新

  • 关注

    2147483647和1都默认是int类型,所以编译器在计算的时候,默认结果也认为是int类型,编译器在将2147483648这个计算结果赋值给int变量时,会进行安全性检查,这个结果超出最大整数范围,所以编译器会报错。
    但是,int a = 2147483648这么写的时候,编译器只把2147483648作为一个数字常量,并用二进制存储,但是,因为编译器无法判断这个数的正负性,就像0XFF这个数,你可以认为他是正数,也可认为它是负数,因为没有明确的符号来说明这个数的正负性,同理2147483648这个数,编译器也无法判断用户的目的是想输入正数还是负数,负数的话是不越界的,所以这么写的时候,编译器不会报错。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月18日
  • 已采纳回答 1月10日
  • 创建了问题 1月10日

悬赏问题

  • ¥15 求!!为啥出错,咋改正
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计