zoukankan      html  css  js  c++  java
  • 有感“溢出”

        早在学习谭老的 《C语言程序设计》时就见过计算机中所谓的“溢出”两字,可那时对此没什么特别的感觉,只是知道了有这么回事:用char型只能存储0 ~ 256大小的字符,int只能存储 -2^15 ~ 2^15-1 大小的数,超出这个范围就会发生溢出,就出错了。再后来为了考研,学习了计算机专业课,对计算机底层的东西了解了一些,知道了当计算机存不下超过存储位数的数据,有数据表示不了点错误,在cpu计算和存储时都会发生溢出。可这些东西都停留在了解到阶段,算是理性认识吧。实际编程中尽量估计好数据范围,基本没碰到过溢出导致的隐性bug(主要是本科时基本没怎么写过程序尴尬)。
        这次在实验室做项目总算是真正自己编写了上千行的代码,对编程有了小小的感性认识。这几天碰到了两个让人头疼的bug,程序在刚开始运行时没问题,可一到计算复杂时就出现莫名错误,反复查看了代码也没什么头绪,最后在单步跟踪时发现了问题,大致情况是这样的,当初设计程序时考虑到变量a的值会很大,于是a的类型设为long int,a = b * c; b和c都是int型,这里a虽然是long int 型,但b*c时,因为b c都是int型,所以b*c的也是int型,当结果非常大时,这个结果会发生溢出,导致a的值是错误的。
        解决方法也很简单,只要把b或c改成long int型,这样计算b*c时,结果也是long int型,赋给a的值也就是正确的结果了。

  • 相关阅读:
    MySQL的FORMAT函数用法规则
    MySql 里的ifnull、nullif、isnull和if用法
    分布式中ID的常用解决方案
    Java多线程问题总结
    Mysql当前日期加减一个月
    Spring Boot浅谈(是什么/能干什么/优点和不足)
    Vue.js 入门教程
    Git服务器的搭建与简单使用教程
    阿里巴巴-德鲁伊druid连接池配置
    一些安卓实用代码
  • 原文地址:https://www.cnblogs.com/friedwm/p/1869365.html
Copyright © 2011-2022 走看看