欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++基础-无符号类型、选择整型类型和整型字面值实例讲解

程序员文章站 2023-01-24 18:30:40
3.1.4 无符号类型 前面介绍的4中整型都有一种不能存储负数值的无符号变体,其优点是可以增大变量能够存储的最大值。例如,如果short表示的范围为-32768到+32767,则无符号版本的表示范围...

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 = "<