牛骨文教育服务平台(让学习变的简单)

C++中整型数有点令人迷惑不解。就像C语言一样,C++被设计成允许程序在必要的时候直接处理硬件,因此整型被定义成满足各种各样硬件的特性。大多数程序员可以(应该)通过限制实际使用的类型来忽略这些复杂性。

实际上,许多人用整型进行计数。例如:程序经常计算像vector或数组这种数据结构的元素的个数。其实标准库定义了一组类型用于统计对象的大小。因此,当计数这些元素时使用标准库定义的类型总是正确的。其他情况下,使用unsigned类型比较明智,可以避免值越界导致结果为负数的可能性。

当执行整型算术运算时,很少使用short类型。大多数程序中,使用short类型可能会隐含赋值越界的错误。这个错误会产生什么后果将取决所使用的机器。比较典型的情况是值“截断”以至于因越界而变成很大的负数。同样的道理,虽然char类型是整型,但是char类型通常用来存储字符而不用于计算。事实上,在某些实现中char类型被当作signed类型,在另外一些实现中则被当作unsigned类型,因此把char类型作为计算类型使用时容易出问题。

在大多数计算技上,使用int类型进行整型计算不易出错。就技术上而言,int类型用16位表示——这对大多数应用来说太小了。实际应用中,大多数通用机器都是使用和long类型一样长的32位来表示int类型。整型运算时,用32位表示int类型和用64位表示long类型的机器会出现应该选择int类型还是long类型的难题题(当然这对ACMer来说并不是什么难题可以瞬间判断)。在这些机器上,用long类型进行计算所付出的运行时代价远远高于int类型进行同样运算的代价,所以选择类型前要先了解程序的细节并且比较long类型与int类型的实际运行时性能代价。

决定使用哪种浮点型就容易多了:使用double类型基本上不会错。在float类型中隐式的精度损失是不能忽视的,而双精度计算的代价相对于单精度可以忽略。事实上,有些机器上,double类型比float类型的计算要快得多。long double类型提供的精度通常没有必要,而且还要承担额外的运行代价。