zoukankan      html  css  js  c++  java
  • 数据溢出

    基本数据类型

    基本数据类型分两大类:

    1. 整型
    2. 浮点型
    • 整型包括char,short,int,long,long long
    • 除此之外,整型还有无符号类型unsigned ...
    • 浮点型包括float,double,long double

    规则:

    short至少16位,int至少和short一样长;

    long至少32位,至少和int一样长;

    long long至少64位,至少和long一样长。



    float至少4个字节;

    double至少6个字节,并且不少于float;

    long double至少和double一样长。

    数据范围

    不同的系统环境,数据范围有所不同;32位/64位操作系统,数据范围也有所不同。

    可以通过代码来确定不同的范围:

    1. c语言定义了一系列的宏
    #include <stdio.h>
    #include <limits.h>
    
    int main()
    {
        printf("max integer: %d
    ", INT_MAX);
        printf("min integer: %d
    ", INT_MIN);
        return 0;
    }
    
    1. C++ 数值极限
    #include <iostream>
    #include <limits>
    
    int main()
    {
        std::cout << numeric_limits<int>::max() << endl;
        std::cout << numeric_limits<int>::min() << endl;
        return 0;
    }
    
    

    数据类型应用

    介绍个亲身遇到的数据溢出的问题。

    1. 数据压缩后还原导致溢出
    int d = 0;
    long value = d * 1000 + 10;
    

    上面一段代码就有发生数据溢出的可能。当变量d足够大时,再乘以1000就会溢出。结果可想而知,是一个相对小的数值。

    //可以这样改写,就不会出现问题
    long value = (long)d * 1000 + 10;
    
    • C/C++基本数据类型,每一种都有范围。在选择数据类型要注意合适的范围,否则会造成数据溢出,产生难以发现的bug。
  • 相关阅读:
    串口通信(2)
    串口通信(1)
    extern关键字的使用
    volatile关键字的使用
    Uart串口与RS232串口的区别
    DSP5509的时钟发生器(翻译总结自TI官方文档)
    DSP中的cmd文件
    pragma伪指令
    在C语言中嵌入汇编语言
    another app is currently holding the yum lock;waiting for it to exit...
  • 原文地址:https://www.cnblogs.com/zhugaopeng/p/9949890.html
Copyright © 2011-2022 走看看