第三章 处理数据(1)

来源:互联网 发布:网络监控布线图 编辑:程序博客网 时间:2024/06/04 17:45

 第三章 处理数据
本章内容包括:
C++变量的命名规则
C++内置的整形:unsigned long、long、unsigned int、int、unsigned short、short、char、unsigned char、signed char和bool
表示各种整形的系统限制的climits文件
各种整形的数字常量
使用const限定符来创建符合常量
C++内置的浮点型:float、double和long double
表示各种浮点型的系统限制的cfloat文件
各种浮点类型的数字常量
C++的算术操作符
自动类型转换
强制类型转换

C++类型分两组:基本类型和复合类型。

3.1 简单变量
  为了把信息存储在计算机中,程序必须记录3个基本属性:信息将存储在哪里、要存储什么值、存储何种类型的信息。

3.1.1 变量名
  C++命名规则:
在名称中只能使用字母字符、数字和下划线。
名称的第一个字符不是数字。
区分大写字符和小写字符
不能将C++关键字用作名称。
以两个下划线或下划线和大写字母打头的名称保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给现实,用作全局标识符。
C++对于名称的长度没有限制,名称中所有的字符都有意义。

如果想用两个或更多的单词组成一个名称,通常的做法是用下划线字符将单词分开。或者从第二个单词开始将每个单词的第一个字母大写。(C程序员倾向下划线,而Pascal程序员喜欢大写方式)
最常用的变量前缀:n(表示整型)、str或sz(表示以空字符结束的字符串)、b(表示布尔值)、p(表示指针)、c(表示单个字符)

3.1.2
整数就是没有小数部分的数字。
不同的C++整型使用不同的内存量来存储整数。使用的内存量越大,可以表示的整数值范围也越大。有的类型可表示正负值,而有的不可以。
C++的基本整型(按宽度递增的顺序排列),分别是char、short、int、long。其中每种类型又分为有符合和无符号。

3.1.3 short、int和long
由于char类型有一些特殊属性(它最常用来表示字符,而不是数字),因此本章先介绍其他类型。
计算机内存由一些叫做位(bit)的单元组成。C++的short、int、long类型通过使用不同数目的位来存储值,最多能够表示3种不同的整数宽度。C++提供了一种灵活的标准,它确保了最小长度。
short至少16位
int至少与short一样长
long至少32位,且至少与int一样长

位与字节
计算机内存的基本单元是位(bit)。可以将晚位看作电子开关,可以开,也可以关。关表示值0,开表示值1。8位的内存块可以设置出256种不同的组合。可以是0~255或-128~127。16位则可以表示65536个不同的值。
字节(byte)通常指的是8位的内存单元。从这个意义上说,字节指的就是描述计算机内存量的度量单位。
1KB等于1024字节 1MB=1024KB,不过C++对字节的定义与此不同。C++字节由至少能够容纳实现的基本字符集的相邻位组成。在美国,基本字符集通常是ASCII和EBCDIC字符集。他们都可以用8位容纳。所以使用这两种字符集的系统中,C++字节通常包含8位。
不过,国际编程可能需要使用更大的字符集。如Unicode,因此有些实现可能使用16位甚至32位的字节。
这三种类型都是符合类型,这意味着每种类型的取值范围中,负值和正直几乎相同。如:16位的int取值范围为-32768~32767。
要知道系统中整数的最大长度,可以在C++程序中使用C++工具来检查类型的长度。首先sizeof操作符返回类型或变量的长度,单位为字节。
注意字节的含义依赖实现。因此一个系统中,int可能是16位,而另一个系统中可能是32位。其次,头文件climits(在老式实现为limits.h)中包含了关于整型限制的信息。具体地说,它定义了表示各种限制的符合名称。例如,INT_MAX位int的最大取值。CHAR_BIT位字节的位数。

climits中的符号常量
CHAR_BIT(char的位数)、CHAR_MAX(char的最大值)、CHAR_MIN(char的最小值)、SCHAR_MAX(signed char的最大值)、SCHAR_MIN(signed char的最大值)、UCHAR_MAX(unsigned char的最大值)、SHRT_MAX(shor的最大值)、SHRT_MIN(short的最小值)、USHRT_MAX(unsigned short的最大值)、INT_MAX(int的最大值)、INT_MIN(int的最小值)、UINT_MAX(unsigned int的最大值)、LONG_MAX(long的最大值)、LONG_MIN(long的最小值)、ULONG_MAX(unsigned long的最大值)
记住:如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的。这意味着该变量的值将是它被创建之前,该内存单元保存的值。

climits文件中包含与下面类似的语句行:
#define INT_MAX 32767
该编译器告诉处理器。在程序中查找INT_MAX替换为32767.

3.1.4 无符号类型
  前面三种整型都有一种不能存储负数值的无符号变体,其优点是可以增大变量能够存储的最大值。如:short表示的范围为-32768到32767,则无符号版本的表示范围为0~65535.
要创建无符号版本的基本整型,只需要使用关键字unsigned来修改声明即可。
注意,unsigned本身是unsigned int的缩写。
这些整型变量的行为就像里程表。如果超越了限制,将取另一范围的值

超越long
C99添加了两种新的类型。它们很可能成为下一版C++的组成部分。很多C++编译器已经支持它们了。分别是long long和unsigned long long。两种类型都至少是64位。切至少同long和unsigned long类型一样宽

3.1.5 选择整数类型
C++提供了大量的整型。应该使用那种类型呢?通常int被设置为对目标计算机
而言最为自然的长度。自然长度(natural size)指的是计算处理起来效率最高的长度。如果没有非常有说服力的理由来选择其他类型,则应使用int。

如果知道变量可能表示的整数值大于16位整数的最大可能值,则使用long。即使系统上为32位也应该这样做。这样,当程序移植到16位系统中时,程序就不会突然无法正常工作。

3.1.6 整型常量
整型常量是显示式地书写的常量,如212或1776。与C相同,C++能够以3种不同的计数方式来书写整型:基数为10、基数8(老式UNIX版本)和基数为16。

iostream还提供了控制符、dec、hex、oct。分别用于只是cout以十进制、十六进制、八进制格式显示整数。

3.1.7 C++如何确定常量的类型
如果输入一个常量,除非有理由存储为其他类型。否则C++将整型常量存储为int类型。在将40000表示为long的计算机中,十六进制0x9C40(40000)将被表示为unsigned int。这是因为十六进制常用来表示内存地址。而内存地址没有符号。因此unsigned int 比long更适合用来表示16位的地址。

3.1.8 char类型:字符和小整数
char类型是专为存储字符而设计的。虽然char最常用来处理字符,但也可以将它用做short更小的整型。实际上多数系统所支持的字符不超过256种。如美国的ASCII字符集。

函数cout.put()是一个重要的C++OOP概念——成员函数
在C++的早起版本之前,也将把字符常量存储为int类型。因此有cout.put()

C++中常量最好是用单引号括起。这种表示法代表的是字符的数字编码;如'A'为65,即字符A的ASCII码;

C++转义序列的编码
换行符NL(\n)10、水平制表符HT(\t)9、垂直制表符VT(\v)11、退格BS(\b)8、回车CR(\r)13、振铃BEL(\a)7、反斜杠\(\\)92、问号?(\?)63
单引号'(\')39、双引号"(\")34;
换行符可代替endl,用于输出重起一行。

注意:有些基于ANSI C之前的编译器的C++系统不能识别\a。对于使用ASCII字符集的系统,可以用\007替换\a。有些系统的行为可能有所不同,例如可能将\b显示为一个小矩形,而不是退格,或者在退格,或者在退格时删除,还可能忽略\a。

通用字符名
C++实现支持一个基本的源字符集,即可用来编写源代码的字符集。德国实现可能允许使用日耳曼的元音变音,而法国实现这允许使用重元音。C++有一种特殊字符机制,它独立任何特定的键盘。使用的是通用字符名(universal character name)
通用字符名的用法类似转义序列。通用字符名可以以\u或\U打头。\u后面是8个十六进制,\U后面是16个十六进制。这些表示的是字符的ISO 10646编码。

signed char和 unsigned char
与int不同的是,char在默认情况下既不是没有符号,也不是有符合。是否有符合由C++实现决定。这样编译器开发人员可以最大限度地将这种类型与硬件匹配起来。如果char有某种特定的行为对您来说非常重要。可以甚至为signed 和unsigned

如果将char用作数值类型,则unsigned char和signed char之间的差异将非常重要。unsigned char类型的表示范围通常为0~255,而signed的表示范围-128到127.例如假设使用一个char变量来存储像200这样大的值,则在某些系统上可以,而在另一些系统上则不可以。但是使用unsigned可以在任何系统达到这种目的。

wchar_t 宽字符
目的是一个wchar_t就可以表示一个字(比如中文一般需要16bit才能表示)。MSVC 的wchar_t 为 16bit,其它平台可能是32bit。
char16_t 存储 UTF-16 编码的字符,有的字可能需要 2 个 char16_t 来保存。
char32_t 存储 UTF-32 编码的字符,一个 char32_t 可保存一个字。
char 与 wchar_t 没有指定字符编码类型

3.1.9新的bool类型
ANSI/ISO C++标准添加了一种名叫bool的新类型。它的名称来源于英国数学家Georoge Boole,是他开发了逻辑律的数学表示法。在计算机中,布尔变量的值可以是ture或false。
C++将非零值解释为ture,将零解释为false

 

0 0