【转】c++各种数据类型所占存储空间大小

一个程序要运行,就要先描述其算法。描述一个算法应先说明算法中要用的数据,数据以变量或常量的形式来描述。每个变量或常量都有数据类型。
  变量是存储信息的单元,它对应于某个内存空间。用变量名代表其存储空间。程序能在变量中存储值和取出值。
  在定义变量时,说明的变量名字和数据类型(如int)告诉编译器要为变量分配多少内存空间,以及变量中要存储什么类型的值。
  内存单元的单位是字节。如果要建立的变量类型的长度是2个字节,变量就需要保留2个字节的内存。 变量的数据类型的作用之一是告诉编译器要为变量分配多少内存。
  数据类型简称类型。在不同的计算机上,每个变量类型所占用的内存空间的长度不一定相同。例如,在16位计算机中,整型变量占2个字节,而在32位计算机中,整型变量占4个字节。C++的数据类型有基本数据类型和非基本数据类型之分。基本数据类型是C++内部预先定义的数据类型。 非基本数据类型包括指针、数组和结构以及类类型等,非基本数据类型也称用户定义数据类型。
  基本数据类型有char(字符型)、int(整型)、float(浮点型)和double(双精度型)。在ANSI C++中,还有wchar_t(双字节字符型)和bool(布尔型),见图2-1。


  图中type表示非空数据类型。
  除上述一些基本数据类型外,还有一些数据类型修饰符,它用来改变基本类型的意义, 以便更准确地适应各种情况的需要。 修饰符有 long(长型符)、short(短型符)、signed(有符号)和unsigned(无符号)。
  数据类型的描述确定了其内存所占空间大小,也确定了其表示范围。以在16位计算机 中表示为例,基本数据类型加上修饰符有表2-2的描述。

类型 说明 长度(字节) 表示范围 备注 char 字符型 1 -128~127 -27~(27-1) unsigned char 无符号字符型 1 0~255 0~(28-1) signed char 有符号字符型 1 -128~127 -27~(27_1) int 整形 2 -32768~32767 -215~(215-1) unsigned int 无符号整形 2 0~65536 0~(216-1) int 有符号整形 2 -32768~32767 -215~(215-1) shord int 短整形 2 -32768~32767 -215~(215-1) unsigned shord int 无符号短整形 2 0~65535 0~(216-1) signed shord int 有符号短整形 2 -32768~32767 -215~(215-1) long int 长整形 4 -2147483648~2147483647 -231~(231-1) unsigned long int 无符号长整形 4 0~4294967296 0~(235-1) signed long int 有符号长整形 4 -2147483648~2147483647 -231~(231-1) float 浮点型 4 -3.4×1038~-3.4×1038 7位有效位 double 双精度型 8 -1.7×10308~-1.7×10308 15位有效位 long double 长双精度型 10 -3.4×104392~1.1×104392 19位有效位

表2-2 常用基本数据类型描述

  在大多数计算机上,short int表示2个字节长。short只能修饰int,short int可以省略为short。
  long只能修饰int和double。修饰为long int(可以省略为long)时,一般表示4个字节,修饰long double时,一般表示10个字节。
  unsigned和signed只能修饰char和int。一般情况下,默认的char和int为signed。实型数float和double总是有符号的,不能用unsigned修饰。
  bool型(布尔型,也称逻辑型)数据的取值只能是false(假)或true(真)。  bool型数据所占的字节数在不同的编译系统中可能不一样,在VC++6.0编译环境中bool型数据占一字节。
  用sizeof(数据类型)可以确定某数据类型的字节长度。例如用下面的语句:
cout <<”size of int is” <<sizeof(int) <<endl;
  在16位计算机上将输出:
    size Of int is 2


->强类型语言

  C++是强类型语言。 强类型语言要求程序设计者在使用数据之前对数据的类型进行声明。例如,在存储一个整数值之前,首先必须告诉计算机要存储的是一个整数类型。使用强类型语言有很多好处,例如,错把一个整数当成一个职工的编号,编译器就会产生错误信息提示。
  强类型语言是通过编译器的功能来体现的。一个编译器能检查出的错误越多,我们就说该编译器越好。
  在程序设计中,绝大部分的错误是发生在数据类型的误用上,所以现代程序设计语言都要求是强类型语言,因它能够检查出尽可能多的数据类型方面的错误。
  例如,如果一个圆半径用浮点数表示, 占用4个字节的内存,而一个整数只占用2个字节的内存。如果要清除一个圆半径,那么就要清除4个字节的内容。如果把一个整数当作一个圆半径来清除, 那么除了清除整数的2个字节外,还清除了其他2个字节的内容,也许额外清除的2个字节中包含有重要的信息,这种错误的清除会造成意想不到的后果。
  对于一个初学者来说, 那种对数据类型要求不严格的语言(如:BASIC)更易于入门。但是,它不会像强类型语言那样能够捕获错误,因而最终的程序可能出现更多的错误。

原文地址:https://www.cnblogs.com/huapox/p/3172536.html