第3章 处理数据

1. 基本类型

基本类型 :整数、浮点数 (提供多种变体)
基本数据类型

typedef short int wchar_t; //wchar_t 实际上的空间是和 short int 一样

typedef 为一个已有的类型取一个新的名字
typedef int feet;  // feet是int的了另一个名称
下面的声明是完全合法的,它创建了一个整型变量 distance
feet distance;

wchar_t可以表示扩展字符集,是一种整数类型。cin和cout将输入和输出看作char流,不适于处理wchar_t类型。iostream头文件的最新版本提供了作用相似的工具,wcin和wcout,用于处理wchar_t流。

各种变量类型在内存中存储值时需要占用的内存,不同系统会有所差异
在这里插入图片描述
术语宽度用于描述存储整数时使用的内存量,C++的基本整型(按宽度递增顺序排列)分别是char、short int、int、long int和C++新增的long long,其中每种类型都有符号版本和无符号版本。

可对类型名或变量名使用sizeof运算符

cout << "int is" << sizeof  (int) << "bytes. \n";   // 对类型名使用sizeof,应将名称放到括号内
cout << "short is" << sizeof n_short << "bytes.\n"; //但对变量名,括号可选

声明语句

声明语句指出存储位置并提供位置标签

int carrots

这条语句提供两个信息:程序需要开辟空间存储一个整数;程序将使用carrots来标识存储在该内存单元中的值。
变量定义和声明

变量作用域

作用域是程序的一个区域,一般来说有三个地方可以定义变量:
在函数或一个代码块内部声明的变量,称为局部变量。
在函数参数的定义中声明的变量,称为形式参数。
在所有函数外部声明的变量,称为全局变量。
程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。当局部变量被定义时,系统不会对其初始化,必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值。
int 0; char ‘\0’; float 0; double 0; pointer NULL

运算符

算数运算符
+,-,*,/,%,++,–
/:若两个操作数都是整数,结果的小数部分将被丢弃,若其中有一个或两个操作数是浮点数,小数部分将保留,结果是浮点数。
a++与++a:前缀形式与后缀形式之间有一点不同。如果使用前缀形式,则会在表达式计算之前完成自增或自减,如果使用后缀形式,则会在表达式计算之后完成自增或自减
关系运算符
==,!=,>,<,>=,<=
逻辑运算符
&&,||,!
赋值运算符

位运算符
在这里插入图片描述
其他运算符
在这里插入图片描述

2. 复合类型

基于基本整型和浮点型创建,影响最深远的复合类型是类,更普通的复合类型是:数组,存储多个同类型的值,一种特殊的数组可以存储字符串;指针:将数据存储位置告诉计算机;结构:存储多个不同类型的值。

枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合,"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
创建枚举,需要使用关键字 enum。枚举类型的一般形式为

enum 枚举名{ 
     标识符[=整型常数], 
     标识符[=整型常数], 
... 
    标识符[=整型常数]
} 枚举变量;

如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始。

enum color { red, green, blue } c;
c = blue;

默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2

enum color { red, green=5, blue }; blue 的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0
enum {zero, null=0} zero和null都是0

C++的enum提供了创建符号常量的方式,这种方式可以代替const。

 enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};

这条语句完成两项工作:让spectrum成为新类型的名称;将red等作为符号常量,它们对应整数值0-7.这些常量叫做枚举量。可以用枚举名声明这种类型的变量,如spectrum band。band=blue 合法,band =2000不合法。spectrum变量受限,只有8个可能的值。对于枚举,只定义了赋值运算符,没有为枚举定义算数运算。band= orange 合法,++band和band = orange +red无效。
枚举量是整型,可被提升为int类型,如 int color = blue,color = 3+ red,其中的加法并非为枚举量定义,但是red被转换为int类型,因此结果类型也是int。 在这种情况下,枚举将被转换为int,因此可以在算术表达式中同时使用枚举和常规整数,尽管并没有为枚举本身定义算数运算。但int类型不能自动转换为枚举类型,如 band =3,无效。
band = orange+ red 无效原因:确实没有为枚举定义运算符+,但用于算数表达式中时,枚举将被转换为整数,因此orange+red被转换为1+0。这是一个合法的表达式,但其类型为int,不能将其赋给类型为spectrum的变量band

枚举的取值范围
最初只有声明中指出的值是有效的,C++现在通过强制类型转换增加了可赋给枚举变量的合法值。每个枚举都有取值范围,通过强制类型转换,可将取值范围中的任何整数赋给枚举变量,即使这个值不是枚举值。

enum bits{one=1, two=2, four=4};
bits myflag;
myflag = bits{6}; 合法,因为6在bits的范围内

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值