C++基础-无符号类型、选择整型类型和整型字面值实例讲解
3.1.4 无符号类型
前面介绍的4中整型都有一种不能存储负数值的无符号变体,其优点是可以增大变量能够存储的最大值。例如,如果short表示的范围为-32768到+32767,则无符号版本的表示范围为0-65535。当然,仅当数值不会为负时才应使用无符号类型,如人口、粒数等。要创建无符号版本的基本整型,只需使用关键字unsigned来修改声明即可:
unsigned short change;
unsigned int rovert;
unsigned quarterback;
unsigned long gone;
unsigned long long lang_lang;
注意,unsigned本身是unsigned int的缩写。
程序3.2演示了如何使用无符号类型,并说明了程序试图超越整型的限制时将产生的后果。最后在看一看预处理语句#define。
程序3.2 exceed.cpp
下面是该程序的输出:
该程序将一个short变量(sum)和一个unsigned short变量(sue)分别设置为最大的short值,在我们的上,是32767.然后,将这些变量的值都加1.这对于sue来说没有什么问题,因为新值仍比无符号整数的最大值小得多;但sam的值从32767变成了-32768!同样,对于sum,将其设置为0并减去1,也不会有问题:但对于无符号变量sue,将其值设置为0并减去后,它变成了65535。可以看出,这些整型变量的行为就像里程表。如果超越了限制,其值将为范围另一端的取值。c++确保了无符号类型的这种行为,但c++并不保证符号整型超越限制(上溢和下溢)时不出错,而这正是当前实现中最常见的行为。
3.1.5 选择整型类型
c++提供了大量的整型,应使用哪种类型呢?通常,int 被设置为对目标计算机而言最为“自然”的长度,自然长度指的是计算机处理起来效率最高的长度。如果没有非常有说服力的理由来选择其他类型,则应使用int。
现在来看看可能使用其他类型的原因。
如果变量表示额度值不可能为负,如文档中的字数,则可以使用无符号类型,这样变量可以表示更大的值。
如果知道变量可能表示的整数值大于16位整数的最大可能值,则使用long。即使系统上int位32位,也应这样做。这样,将程序移植到16位系统是,就不会突然无法正常工作了。如果要存储的值超过20亿,可使用long long。
如果short比int小,则使用short可以节省内存。通常,仅当有大型整型数组是,才有必要使用short。(数组是一种数据结构,在内存中连续存储同类型的多个值。)如果节省内存很重要,则应使用short而不是使用int,即使它们的长度是一样的。例如,假设要将程序从int位16位的系统移到int位32位的系统,则用于存储int数组的内存量将加倍,但short数组不受影响。请记住,节省一点就是赢得一点。
如果只需要一个字节,可使用char,这将稍后介绍
3.1.6 整型字面值
整型字面值(常量)是显式地书写的常量,如212或1776。与c相同,c++能够以三种不同的计数方式来书写整数:基数为10、基数为8(老式unix版本)和基数为16(硬件的最爱)。这里将介绍c++表示法。c++使用前一(两)位来表示数字常量的基数。如果第一位为1~9,则基数为10(十进制):因此93是以10为基数的。如果第一位是0,第二位为1~7.则基数为8(八进制);因此,042的基数是8;它相当于十进制34.如果前两位为0x或0x,则基数为16(十六进制);因此0x42为十六进制数,相当于十进制数66,字符a~f和a~f表示了十六进制位,对应于10~15。0xf为15,0xa5为165(十个16加5个1)。程序3.3演示了这三种基数
程序3.3 hexoct.cpp
//hexoct1.cpp——shows hex and octal literals #include int main() { using namespace std; int chest = 42; int waist = 0x42; int inseam = 042; cout<<"monsieur cuts a striking figure!\n"; cout<<"chest = "<