必威体育Betway必威体育官网
当前位置:首页 > IT技术

17-C++基础-无符号类型、选择整型类型和整型字面值

时间:2019-09-30 23:42:17来源:IT技术作者:seo实验室小编阅读:79次「手机版」
 

无符号整型

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<iOStream>

int main()
{
	using namespace std;
	int chest = 42;
	int waist = 0x42; 
	int inseam = 042; 
	
	cout<<"Monsieur cuts a striking figure!\n"; 
	cout<<"chest = "<<chest<<" (42 in decimal)"<<endl; 
	cout<<"waist = "<<waist<<" (0x42 in hex)"<<endl; 
	cout<<"inseam =  "<<inseam<<" (042 in octal)"<<endl; 
	
	return 0;
} 

在默认情况下,cout以十进制格式显示整数,而不管这些整数在程序中是如何书写的,如下面的输出所示:

记住,这些表示方法仅仅是为了表达上的方便。例如,如果CGA视频内存段为十六进制B000,则不必在程序中使用之前将它转换为十进制数45056,而只需要使用0xB000即可。但是不管把值书写为10,012还是0xA,都将以相同的方式存储在计算机中——被存储为二进制(以2为基数)。

顺便说一句,如果要以十六进制或八进制方式显示值,则可以使用cout的一些特殊特性。前面指出过,头文件iostream提供了控制符endl,用于指示cout重起一行。同样,它还提供了控制符dec、hex和oct,分别用于指示cout以十进制、十六进制和八进制格式显示整数。程序3.4使用了hex和oct以上述三种格式显示十进制42。默认格式为十进制,在修改格式之前,原来的格式将一直有效。

程序3.4    hexoct2.cpp

//hexoct2.cpp——display values in hex and octal
#include<iostream>
using namespace std;
int main()
{
	
	int chest = 42;
	int waist = 42; 
	int inseam = 42; 
	
	cout<<"Monsieur cuts a striking figure!\n"; 
	cout<<"chest = "<<chest<<" (decimal for 42)"<<endl; 
	cout<<hex;
	cout<<"waist = "<<waist<<" (hexadecimal for 42)"<<endl; 
	cout<<oct;
	cout<<"inseam =  "<<inseam<<" (octal for 42)"<<endl; 
	
	return 0;
} 

下面是运行该程序时得到的输出:

诸如cout<<hex;等代码不会再屏幕上显示任何内容,而只是修改cout显示整数的方式。因此,控制符hex实际上是一条消息,告诉cout采取何种行为。另外,由于标识符hex位于名称空间std中,而程序使用了该名称空间,因此不能将hex用作变量名。然而,如果省略编译指令using,而使用std::cout、std::endl、std::hex和std::oct,则可以将hex用作变量名。

相关阅读

算法分析:大O符号/大Ω符号/大Θ符号/小o符号/小w符号

感谢作者分享,原文链接:http://blog.csdn.net/u012816041/article/details/49888631大O,渐进表示法,接下来我尝试用最简单的方式进行

七彩云南知名商标已成独具辨识度的品牌符号

&ldquo;彩云之南&rdquo;&ldquo;彩云南&rdquo;&ldquo;云之南方&rdquo;,每当人们提起云南时总是会不禁想到这样的美誉,但正是云南这独

电容单位换算,电容分类,电容的符号,电容上标识的解释

电容是电子电器的重要组成部分,是电子知识的基础。而电容的单位换算、以及电容的分类和电容的符号是必须熟练掌握的,很多刚毕业的一

电脑键盘上特殊符号和标点符号名称的输入方法汇总

使用电脑编辑文章,需要用到一些特殊符号和标点符号,很多使用电脑的新朋友,对输入特殊符号和标点符号还不是那么明白输入的方法。下面

怎么打立方米符号m&sup3; 打出m&sup3;立方米符号的方

首先,我们打开WORD,启动WORD的方法有很多种,下面先简单介绍下有哪几种常用的方法咯,希望大家不要为小编的罗嗦感到烦琐。嘿嘿。 1、开

分享到:

栏目导航

推荐阅读

热门阅读