【C/C++教学专题之007】C/C++中的基本数据类型
数据类型的意义
程序 = 数据组织 + 数据处理。因此要写好计算机程序,学会使用数据类型是第一步。而所谓数据类型,就是根据数据本身性质的不同而分出的各种类别。不同的数据类型,在存储格式、运算规定、输入输出等方面都有不同的要求。
在C/C++中,任何数值必须具备一个确定的类型,且该类型不能被改变。
在这里首先只讨论最基本的类型,这些类型是语言当中自带的,用以满足最简单的程序设计要求。
整数类型:int(可用short,long,signed和unsigned修饰)
实数类型:float/double
字符类型:char
布尔类型:bool(仅限C++)
以整数和实数类型的对比为例:在生活中我们使用整数和小数其实并没有明显的区别,但在计算机中整数和小数的存储格式是完全不同的,而本质上的不同也带来了使用上的区别。这样的严格区分虽然对初学者来说显得不那么方便和自然,但对于提高程序的运行效率有很大的意义。
总之,C/C++都是强类型的语言,要求变量的使用要严格符合定义,同时所有变量都必须先定义后使用。
数据类型的选择
在使用变量之前,首先需要给变量选择合适的类型,这种选择一定要首先考虑变量本身的性质,而不能生搬硬套。比如考虑班级的人数,就应该选择int类型,因为人数肯定是整数;而计算人的身高,就应该选择实数类型float或者double,这里如果选择int,那么所有的人都只能变成1米或者2米了。
当然我们看到,在上面的基本类型中,除了整数和实数的区分之外,还有更详细的区分,这里需要详细解释一下。
int类型:默认为有符号整数(即用补码形式保存),长度和计算机有关。一般认为早期16位的计算机系统当中int类型长度为2个字节,但现在早已变为4个字节。
short int类型:有符号整数,且长度确定为2个字节。
long int类型:有符号整数,且长度确定为4个字节。
总结一:在现在的计算机当中short int几乎已经没有意义(范围太小),而long int因为和int完全等价所以也没有了意义。所以只要了解这两个概念即可,一般编程中不会使用到。
signed int/short/long:有符号整数,因为int默认就是有符号的,所以signed可以省略。
unsigned int/short/long:无符号整数,所谓无符号整数就是所有的二进制码直接代表数值,而不考虑任何符号的问题。
以int类型为例,长度为4个字节。如果是无符号,其范围是0~232-1,而有符号的话,范围则是-231~231-1。
注:这里关于补码和范围的讨论,不清楚的可以参考之前的专题。
总结二:无符号数一定都是正数。如果有某种数据一定是正的整数,就可以选用该类型。这里要注意无符号数和有符号数范围的对比。
float类型:用4个字节存放的实数,其有效数字约为7位,范围在10-38~1038之间
double类型:用8个字节存放的实数,其有效数字约为16位,范围在10-308~10308之间
这两种类型都可以用来表示实数,许多场合下可以相互替代。其区别主要在于:
1、double的精度更高:如果需要精密的实数计算或者更大的范围,建议选择double类型,实际上C/C++中直接写实数的时候,默认就是double类型。
2、double占据空间更大,运算速度更慢:这是和第1点吻合的,如果对精度要求不高,可以改用float类型提高运算速度。
注意:float和double类型无法精确表示数据的所有位,换句话说在编程序的过程中实数往往都是不精确的,是有误差的。
对实数的运算,需要照顾到上述的特点,在今后的示例当中我们也会多次提到这个问题。
char类型:字符是一类非常常见的数据,当然我们这里主要讨论的是英文字符的处理。对于字符类数据,在计算机当中存放的其实是字符的ASCII码值,也就是说字符类型本质上也是整数!
ASCII码是美国人提出的一种编码方案,将常用的英文符号用数字进行了编码,如字母A的ASCII值为65,而字母a的ASCII值为97。存放这样的整数,只需要1个字节就够了,因此char类型的长度只有1个字节,而且也可以用signed和unsigned进行修饰。
注意:虽然char类型的本质上是整数,但这种类型在输入和输出的时候其表象还是字符的形式,因此要注意区分和理解。既要理解char和int类型的共同点,又不能完全将它们混为一谈。
bool类型:布尔代数是一门很有意思的数学学科,在大学当中有很多课程需要用到相关的知识。C++中的bool类型就专门用来存放逻辑类型的变量,这种变量的特点就是其取值只能从“真”和“假”两个值当中选取。我们会在后面讲解逻辑值和逻辑运算的时候再专门进行讨论。
总结和注意点
1、虽然基本类型也有很多不同的用法,但真正常用的只有int、double和char。在确定变量类型之前,一定要考虑清楚变量本身的特点和范围,再做决定。有的同学因为看到int的例子比较多,就习惯性地把所有变量都定义为int类型,这样是完全不合理的。
2、不同的类型其运算规定和输入输出的要求也不一样,这种基本的规定是需要熟练掌握的。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。