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。
  • 相关阅读:
    测试72.思维好题
    pbds:STL平衡树
    测试69。这场因为轻视少了很多分。
    C++ 中的四种类型转换
    C++ 中的static关键字
    codeforces 1269 E K Integers
    P4556 [Vani有约会]雨天的尾巴 (线段树合并)
    P3521 [POI2011]ROT-Tree Rotations (线段树合并)
    codeforces 600E E. Lomsat gelral (线段树合并)
    线段树合并的一些题
  • 原文地址:https://www.cnblogs.com/zhugaopeng/p/9949890.html
Copyright © 2011-2022 走看看