【转】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)更易于⼊门。但是,它不会像强类型语⾔那样能够捕获错误,因⽽最终的程序可能出现更多的错误。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论