數據溢出

基本數據類型

基本數據類型分兩大類:ios

  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位操做系統,數據範圍也有所不一樣。

能夠經過代碼來肯定不一樣的範圍:
code

  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;
}

數據類型應用

介紹個親身遇到的數據溢出的問題。
it

  1. 數據壓縮後還原致使溢出
int d = 0;
long value = d * 1000 + 10;

上面一段代碼就有發生數據溢出的可能。當變量d足夠大時,再乘以1000就會溢出。結果可想而知,是一個相對小的數值。io

//能夠這樣改寫,就不會出現問題
long value = (long)d * 1000 + 10;
  • C/C++基本數據類型,每一種都有範圍。在選擇數據類型要注意合適的範圍,不然會形成數據溢出,產生難以發現的bug。
相關文章
相關標籤/搜索