(10)'c++:COMPLETE REFERENCE' 第一部分 第二章(表达式) 第二节

来源:互联网 发布:百度推广优化 编辑:程序博客网 时间:2024/04/30 06:08

基本数据类型的修饰

      除了void数据类型以外,每一种基本数据类型都可以在前面加上多种修饰符。这些修饰符可以改变这些基本数据类型的含义,使得它们可以更准确的适合各种不同的情形。常见的修饰符有以下几个:
signed
unsigned
long
short

      可以用signed、short、long、unsigned来修饰整型,可以用unsigned和signed修饰字符型,同样也可以使用long来修饰double类型(双精度浮点类型)。修饰符加上基本数据类型可以组合出很多种不同的数据类型,这在上一节的表2-1.中已经全部罗列过。表2-1.同时也列出了这些数据类型对应的最小数值范围和近似的位宽。需要指出,表2-1.中的数据类型虽然都是c语言标准下的,但是它们同样适用于典型的c++实现。在这个表中所指出的数据类型的最小范围也是c/c++标准所规定的,它们不一定和应用中常见的数值范围完全相符。比如说,在使用二进制补码算法的计算机上,整型的数值范围至少是-32767到32768。

      在整型前使用signed修饰符是允许的,但是这样做比较多余,因为默认情况下整型就是有符号的。signed修饰符最主要的用途是修饰char类型,因为默认情况下char类型是无符号的。

      有符号和无符号整型的区别就在于对高位(逻辑上的最左位)的不同解释上。当一个整型被定义为有符号整型时,编译器会将高位作为这个整型的符号位。高位为0代表数为正,高位为1代表数为负。通常,负数都是用二进制补码表示,也就是将除了符号位之外的所有位都取反再加1,之后再将符号位置为1。

      有符号整型对于大部分运算来说非常重要,但是它所能表示的绝对值(absolute magnitude)范围仅仅是对应的无符号整型的一半。例如,十进制数32767的二进制表示为:
0111111111111111
如果把高位置为1,则这个数作为有符号数表示十进制的-1,作为无符号数则表示十进制数的65535。

      如果把修饰符单独使用,也就是它们不在加在基本类型符号的前面的时候,那么将会假定它们修饰的是int整型。也就是说有如下的等价情况:
      Specifier                    Same As
      signed                       signed int
      unsigned                     unsigned int
      long                         long int
      short                        short int
      尽管直接使用修饰符暗含着其被修饰类型为int,大部分程序员还是习惯在声明的时候显式的书写int。