2020-07-02

C++中的数据处理,包含以下内容:

1、C++变量的命名规则。

2、C++内置的整型——unsigned long、long、unsigned int、int、unsigned short、short、char、unsigned char、signed char、bool。

3、表示各种整型的系统限制的climits文件。

4、各种整型的数字字面值(常量)。

5、使用const限制符来创建符号常量。

6、C++内置的浮点类型:float、double和long double。

7、表示各种浮点类型的系统限制的cfloat文件。

8、各种浮点类型的数字字面值。

9、C++的算术运算符。

10、自动类型转换和强制类型转换。

一、简单变量

1.1变量名

必须遵循几种简单的C++命名规则:

(1)在名称中只能只用字母字符、数字和下划线。

(2)名称的第一个字符不能是数字。

(3)区分大小写。

(4)不能将关键字用作名称。

(5)以两个下划线或下划线和大写字母打头的名称被保留给实现使用,以一个下划线开头的名称被保留给实现,用作全局标识符。

(6)C++对于名称的长度没有限制,名称中所有的字符都有意义,但有些平台有长度限制。

倒数第二点与前面几点有些不同,因为使用像_time_stop或_Dount这样的名称不会导致编译器错误,而会导致行为的不确定性。换句话说就是不知道结果将会是什么。不出现编译器错误的原因是,这样的名称不是非法的,但要留给实现使用。

1.2整型

不同的C++整型使用不同的内存量来存储整数,可用术语宽度来描述,内存用到的越多,则越宽。C++的基本整型按宽度递增可分为char、short、int、long和C++11新增的long

long,其中每种类型都有符号版本和无符号版本,共有10种类型可供选择。

计算机内存由一些叫做位(bit)的单元组成。如果在所有系统中,每种类型的宽度都相同,那么使用起来会非常方便。但是生活并不是这么简单的,因此C++提供了一种灵活的标准,它确保了最小长度:

(1)short至少16位。

(2)int至少与short一样长。

(3)long至少32位,且至少与int一样长。

(4)Long long至少64位,且至少与long一样长。

当前很多系统都使用最小长度,即short为16位,long为32位。这仍然为int提供了多种选择,其宽度可以是16位、24位或者32位,同时又符合标准;甚至可以是64位,因为long和long long至少长64位。

有些实现允许选择如何处理int。类型的宽度随实现而异,这可能在将C++程序从一种环境移到另一种环境时引发问题(包括在同一系统中使用不同的编译器)。

要知道系统中整数的最大长度,可以在程序中使用C++工具来检查类型的长度。首先sizeof运算符返回类型或变量的长度,单位为字节,其使用方法是将类型名放到其后的括号中,如下:sizeof(int)。但是“字节”的含义依赖于实现,因此在一个系统中,两字节的int可能是16位,而在另一个系统中可能是32位。其次,头文件climits中包含了关于整型限制的信息,具体的说,它定义了表示各种限制的符号名称,即其定义了符号常量来表示类型的限制。

climits中的符号常量见表https://blog.csdn.net/lvdezhou/article/details/48806831

1.3无符号类型

前面介绍的4种整型都有一种不能存储负数值的无符号变体,其优点是可以增大变量能够存储的最大值。当然,仅当数值不会为负时才应使用无符号类型。要创建无符号版本的基本整型,只需要使用关键字unsigned来修改声明即可。注意unsigned本身是unsigned int的缩写。整型变量的行为就像里程表,如果超越了限制,其值将为范围另一端的取值。C++确保了无符号类型的这种行为,但并不保证符号整型超越限制(上溢和下溢)时不错误,而这正是当前实现种最常见的行为。

1.4选择整型类型

int被设置为对目标计算机而言最为“自然”的长度。自然长度指的是计算机处理起来效率最高的长度。如果没有非常有说服力的理由来选择其他类型,则应该使用int。如果知道变量可能表示的整数大于16位整数的最大可能值,则使用long。即使系统上int为32位,也应该这么做。这样,将程序移植到16位系统时,就不会突然无法正常工作。如果要存储的值超过20亿,可使用long long。

如果short比int小,则使用short可以节省内存。通常,仅当有大型整型数组时,才有必要使用short。如果节省内存很重要,则应使用short而不是使用int,即使它们的长度是一样的。

1.5整型字面值

整型字面值(常量)是显式书写的常量,如212或176。与C相同,C++能够以三种不同的计数方式来书写整数:基数为10,即第一位为1-9,也称为十进制;基数为8,第一位为0,第二位位1-7,也称为八进制;基数为16,前两位为0x或0X,也称为十六进制。对于十六进制数,字符a-f和A-F表示了十六进制位,对应于10-15。

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

但像头文件iostream提供了控制符endl,用于指示cout重起一行一样,它还提供了dec、hex和oct,分别用于指示cout以十进制、十六进制和八进制显示整数。

这些表示方式仅仅是为了表达上的方便,且都能以相同的方式存储在计算机中—被存

储为二进制数。

1.6 char类型:字符和小整数

编程语言通过使用字母的数值来进行字母的存储,所以char类型是另一种整型。它足够长,能够表示目标计算机系统中的所有基本符号——所有的字母、数字、标点符号等。实际上,很多系统支持的字符否不超过128个,因此用一个字节就可以表示所有的符号。因此,虽然char最常被用来处理字符,但也可以将它用作比short更小的整型。

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

因为char为整型,所有可以对其使用整数操作,如加1。这使得C++将字符表示为整数提供了方便,使得操作字符值很容易。不必使用笨重的转换函数在字符和ASCII码之间来回转换。

Cout.put()是一个类ostream的成员函数,用来输出字符,只有通过类的特定对象来使用成员函数,其中句点称为成员运算符。Cout.put()成员函数提供了另一种显示字符的方法,可以替代<<运算符。可能会有人问,为何需要Cout.put()。答案与历史有关。在C++的Release2.0之前,cout将字符变量显示为字符,而将字符常量显示为数字。问题是,C++早期版本与C一样,也将字符常量存储为int类型。也就是说,’M’的编码77将被存储在一个16位或者32位的单元中,而char变量一般占8位。

下面的语句从常量‘M’中复制8位到变量ch中:

Char ch=‘M’;

遗憾的是,这意味着对cout来说,‘M’和ch有天壤之别,虽然它们存储的值相同。因此下面语句将打印字符的ASCII码,而不是字符:

Cout<<‘$’;

而下面语句就打印字符$:

Cout.put(‘$’);

在Release2.0之后,C++字符常量存储为char类型,而不是int类型,这意味着cout现在可以正确处理字符常量了。

1.7signed char 和unsigned char

与int不同的是,char在默认情况下既不是没有符号,也不是有符号,是否有符号由C++实现决定,这样编译开发人员可以最大限度地将这种类型与硬件属性匹配起来。如果将char用作数值类型,则unsigned char和signed char之间的差异将非常重要。unsigned char类型的表示范围在0-255,而signed char的表示范围在-128-127.另一方面,如果使用char变量来存储标准的ASCII字符,则char有没有字符都没有关系,在这种情况下,可以使用char。

1.8 wcha_t

程序需要处理的字符集可能无法用一个8位的字节来表示,如日文汉字系统。Wcha_t类型是宽字符类型,可以表示扩展字符集。

1.9bool类型

C++将非零值解释为true,将零解释为false。现在可以使用bool类型来表示真和假了,它们分别用预定义的字面值true和false表示,也就是说,可以这样编写语句:

Bool is_ready=true;

字面值true和false都可以通过提升转换为int类型,true被转换为1,而false被转换为0:

Int ans=true;

Int promise=false;

另外,任何数字值或指针值都可以被隐式转换为bool值。任何非零值都被转换为true,而零被转换为false:

Bool start=-100;

Bool stop=0;

二、const限定符

C++有一种更好的处理符号常量的方法,这种方法就是使用const关键字来修改变量声明和初始化。假如需要一个表示一年中月份数的符号常量,则可写为:

Const int Months=12;

常量Months被初始化后,其值就固定了,编译器将不允许在修改该常量的值。

一种常见的做法是将名称的首字母大写,以提醒你Months是一个常量。另一种约定是将整个名称大写,使用#define创建常量时通常使用这种约定。还有一种约定是以字母k打头,如kmonths。

创建常量的通用格式:

Const type name=value;

相比#define,const更好,首先它能够明确指定类型,其次可以使用C++的作用域规则将定义限制在特定的函数或者文件中,其中作用域规则描述了名称在各种模块中的可知程度。第三,可以将const用于更加复杂的类型,如数组和结构。

三、浮点数

C++有3种浮点类型:float、double和long double。通常,float为32位,double为64位,long double为80、96或128位,另外,这3种类型的指数范围至少是-37到37。

调用ostream类的setf()方法,这种调用迫使输出使用定点法,以便更好地了解精度,它防止程序将较大的值切换为E表示法,并使程序显示到小数点后6位。

浮点常量在默认情况下为double类型。

四、C++算术运算符

%运算符求模。要求两个操作数必须都是整型,将该运算符用于浮点数将导致编译错误。如果其中一个是负数,则结果的符号满足如下规则:(a/b)*b+a%b=a。

4.1类型转换

C++自动执行很多类型转换:

1、将一种算术类型的值赋给另一种算术类型的变量时,C++将对其值进行转换。

2、表达式种包含不同的类型时,C++将对值进行转换。

3、将参数传递给函数时,C++对值进行转换。

(1)初始化和赋值进行的转换

(2)以{}方式初始化时进行的转换(C++11)

(3)表达式中的转换

遵循以下规则:

1、如果有一个操作数的类型是long double,则将另一个操作数转换为long double。

2、否则,如果有一个操作数的类型是double,则将另一个操作数转换为double。

3、否则,如果有一个操作数的类型是float,则将另一个操作数转换为float。

4、否则,说明操作数都是整型,因此执行整型提升。

5、在这种情况下,如果两个操作数都是有符号或无符号的,且其中一个操作数的级别比另一个低,则转换为级别高的类型。

6、如果一个操作数为有符号的,另一个操作数为无符号的,且无符号操作数的界别比有符号操作数的级别高,则将有符号的操作数转换为无符号操作数所属的类型。

7、否则,如果有符号类型可表示无符号类型的所有可能取值,则将无符号操作数转换为有符号操作数所属的类型。

8、否则,将两个操作数都转换为有符号类型的无符号版本。

对于整型级别来说,有符号整型按照级别从高到低依次为:long long、long、int、short和signed char。无符号整型的排列顺序与有符号整型相同。类型char、signed char和unsigned char的级别相同。类型bool的级别最低。

(4)传递参数时的转换

(5)强制类型转换

强制类型转换的格式:(typeName) value或typeName (value)。第一种来自C语言,第二种格式的C++。

五、总结

1、C++的基本类型分为两组:一组由存储为整数的值组成,另一组由存储为浮点格式的值组成。整型之间通过存储值时使用的内存量及有无符号来区分。整型从最小到最大依次为:bool、char、signed char、unsigned char、short、unsigned short、int、unsigned int、long、unsigned lon以及C++11新增的long long和unsigned long long。

2、浮点类型可以表示小数值以及比整型能够表示的值大得多的值。
————————————————
版权声明:本文为CSDN博主「好学的小李」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zjnldxshsj/article/details/80633071

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352