18-C++基础-C++如何确定常量的类型

3.1.7 C++如何确定常量的类型

程序的声明将特定的整型变量的类型告诉了C++编译器,但编译器如何知道常量的类型呢?假设在程序中使用常量表示一个数字:

cout<<Year = <<1492<<\n

程序将把1492存储为intlong还是其他整型呢?答案是,除非有理由存储为其他类型(如使用特殊的后缀来表示特定的类型,或者值太大,不能存储为int),否则C++将整型常量存储为int类型。

首先来看看后缀。后缀是放在数字常量后面的字母,用于表示类型。整数后面的lL后缀表示该整数位long常量,uU后缀表示unsigned int常量,ul(可以采用任何一种顺序,大写小写均可)表示unsigned long常量(由于小写l看上去很像数字1,因此应使用大写L做后缀)。例如,在int16位、long32位的系统上,数字22022被存储为int,占16位,数字22022L被存储位long,占32位。同样,22022LU22022UL都被存储位unsigned longC++11提供了用于表示类型long long的后缀llLL,还提供了用于表示类型unsigned long long的后缀ullUlluLLULL

接下来考察长度。C++中,对十进制整数采用的规则,与十六进制和八进制稍微有些不同。对于不带后缀的十进制整数,将使用下面几种类型中能够存储概述的最小类型来表示:intlonglong long3000000000被表示为long long类型。对于不带后缀的十六进制或八进制,将使用下面几种类型中能够存储该数最小类型来表示:intunsigned intlongunsigned longlong long 、或unsigned long long 。在将40000表示为long的计算机系统中,十六进制数0x9C40(40000)将被表示为unsigned int。这是因为十六进制常用来表示内存地址,而内存地址是没有符号的,因此unsigned int long 更适合用来表示16位的地址。

2.1.8 char 类型:字符和小整数

下面介绍最后一种整型:char类型。顾名思义,char类型是专门存储字符(如字母和数字)而设计的。现在,存储数字对于计算机来说算不了什么,但存储字母则是另一回事。编程语言通过使用字母的数值编码解决了这个问题。因此,char类型是另一种整型。它足够长,能够表示目标计算机系统中所有基本符号——所有字母、数字、标点符号等。实际上,很多系统支持的字符都不超过128个,因此用一个字节就可以表示所有的符号。因此,虽然char最常被用来处理字符,但也可以用它用作比short更小的整型。

在美国,最常用的符号集是ASCII字符集。字符集中的字符用数值编码(ASCII码)表示。

例如,字符A的编码为65,字母M的编码为77。为方便起见,我们在示例中使用的是ASCII码。然而,C++实现使用的是其主机系统的编码——例如,IBM大型机使用EBCDIC编码。ASCIIEBCDIC都不能很好的满足国际需要,C++支持的宽字符类型可以存储更多的值,如国际Unicode字符集使用的值。本章稍后将介绍wchar_t类型。

程序3.5使用了char类型。

程序3.5 chartype.cpp

//chartype.cpp——the char type
#include<iostream>
using namespace std;
int main()
{
	
	char ch; 
	
	cout<<"Enter a character:"<<endl; 
	cin>>ch;
	cout<<"Hola ! ";
	cout<<"Thank you for the "<<ch<<" character."<<endl;
	
	return 0;
} 

同样,\nC++中表示换行符。下面是该程序的输出:

有趣的是,程序中输入的是M,而不是对应的字符编码77。另外,程序将打印M,而不是77。通过查看内存可以知道,77是内存在变量ch中的值,这种神奇的力量不是来自char类型,而是来自cincout这些工具为您完成了转换工作,输入是,cin将键盘输入的M转换为77;输出时,cout将值77转换为所显示的字符Mcincout的行为都是由变量类型引导的。如果将77存储在int变量中,则cout将把它显示为77(也就是说,cout显示两个字符7)。程序3.6说明了这一点,该程序还演示了如何在C++中书写字符字面值;将字符用单引号括起,如M(注意,示例中没有使用双引号。C++对字符用单引号,对字符串使用双引号。cout对象能够处理这两种情况,但正如第四章将讨论的,这两者有天壤之别)。最好,程序引入了cout的一项特性——cout.put()函数,该函数显示一个字符。

程序3.6 morechar.cpp

//morechat.cpp——the char type and int type contrasted
#include<iostream>
using namespace std;
int main()
{
	
	char ch='M';
	int i=ch;
	cout<<"The ASCII code for "<<ch<<" is"<<i<<endl; 
	
	cout<<"Add one to the character code:"<<endl; 
	ch=ch+1;
	i=ch;
	cout<<"The ASCII code for "<<ch<<" is"<<i<<endl;
	
	cout<<"Displaying char ch using cout.put(ch)";
	cout.put(ch);
	
	cout.put('!');
	cout<<endl<<"Done"<<endl;  
	
	return 0;
} 

下面是程序清单3.6中程序的输出:

1. 程序说明

在程序3.6中,M表示字符M的数值编码,因此将char变量ch初始化为M,将把c设置为77。然后,程序将同样的值赋给int变量i,这样chi的值都是77.接下来,coutch显示为M,而把i显示为77。如前所述,值得类型将引导cout选择如何显示值——这是智能对象的另一个例子。

由于ch实际上是一个整数,因此可以对它使用整数操作,如加1,这将把ch的值变为78。然后,程序将i重新设置为新的值(也可以将i1)。cout再次将这个值的char版本显示为字符,将int版本显示为数字。

C++将字符表示为整数提供了方便,使得操纵字符值很容易。不必使用笨重的转换函数在字符和ASCII码之间来回转换。

即使用过键盘输入的数字也被视为字符,请看下面的代码:

char ch;

cin>>ch;

如果您输入5并按回车键,上述代码将读取字符“5”,并将其对应的字符编码(ASCII编码53)存储到变量ch中。请看下面的代码:

int n;

cin>>n;

如果您也输入5并按回车键,上述代码将读取字符“5”,将其转换为相应的数字值5,并存储到变量n中国能。

最后,该程序使用函数cout.put()显示变量ch和一个字符常量。

 




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值