background image

来计数。因为其中不含有小数部分,因此整型数的运算要比浮点数的运算快很多。
因为整型数对于编程来说非常重要,所以 C++中定义了多种类型的整型类型。就像在表格
2-1 中的那样,有短整型,正规的整型和长整型三种类型。更重要的是每种类型都有有符
号和无符号之分。有符号的整型可以存储正数和负数。缺省情况下,整型数都是有符号的。
因此在 int 

 

前面加上 signed 通常是多余的,但是这种写法是合法的。无符号的整型数只能

存储正数。在需要创建无符号的整型数的时候,就需要使用 unsigned 修饰符。
    有符号和无符号整型数的区别在于整型数的最高位的解释是不一样的。针对有符号的整
型数编译器生成的代码会把最高位解释成整型数的符号位。如果这个符号位是 0,则表示
这个数是一个正数;如果为 1,则表示这个数是个负数。负数通常总是采用补码的方式来
表示。在这种表示方法中,数据的所有比特位(不包含符号位)都是取反的结果,然后加
上 1 的结果。最后,符号位被置为 1。
有符号的整数对于许多的算法来说是很重要的,但是它的取值范围只能是无符号整数取
值范围的一半。例如,假设是 16

 

位的整型数 32767:

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
对于有符号的整型数来说,如果最高位被设置为 1,则这个数被解释为-1(采用二进制的
补码方式)。然而,如果我们把它声明为无符号的整型数,那么当最高位被设为 1 的时候,
它的值将为 65535。
为了理解 C++中有符号和无符号的区别,可以看看下面的程序:
#include <iostream>
/* This program show the differnce between 
   signed and unsigned intergers */
using namespace std;
int main ()
{
    short int i;                      //一个有符号的短整型变量
    unsigned short int j;      //一个无符号的整型变量

    j = 60000;                     //60000 是在无符号的整型变量的表示范围内的。
    i = j;                             //60000 超出了有符号的短整型的表示范围。
                                       //因此,当把他赋值给 i 的时候,它被解释成一个负数了。
    cout << i << " " <<j;

    return 0;
}
上面这个程序的输出如下:
-5536 60000 
由于作为一个短的无符号的整型数 60000 被解释成短的有符号的整型数后为-5536,因此
会出现上面的结果。

    C++允许在声明 unsigned ,short 或者 long 整型数的时候采用简写。我们可以仅使用
unsigned,short, or long 这几个字,而不用谢 int。int 关键字是暗含的。例如,下面的两条语
句都声明了无符号的整型变量:
unsigned x;
unsigned int y;