码迷,mamicode.com
首页 > 其他好文 > 详细

数据溢出

时间:2018-11-13 02:25:24      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:iostream   stream   c语言   操作系统   浮点型   float   long   stdio.h   har   

基本数据类型

基本数据类型分两大类:

  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\n", INT_MAX);
    printf("min integer: %d\n", 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。

数据溢出

标签:iostream   stream   c语言   操作系统   浮点型   float   long   stdio.h   har   

原文地址:https://www.cnblogs.com/zhugaopeng/p/9949890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!