第二天学习精要
变量和数据类型
什么是变量
-
变量就是一个代号,程序运行时系统会自动为变量分配内存空间,于是变量就代表了系统分配的那片内存空间,对变量的访问,就是对其代表的内存空间的访问。
-
变量有名字和类型两种属性,不同变量的名字就对应了内存中的不同地址(即不同位置),而变量的类型,决定了一个变量占用多少个字节。
-
在C++语言中,变量要先定义,然后才能使用。“使用”有时也称为“引用”。读取或修改一个变量的值,都叫使用这个变量。 定义变量的语句,要出现所有使用该变量的所有语句之前。
变量的定义
-
类型名 变量名1, 变量名2, ……,变量名n;
-
例如:int number, price; //定义整型变量 number和price。
-
一个变量不能定义两次。
变量的命名规则
-
变量由大小写字母、数字和下划线构成,中间不能有空格,长度不限,不能以数字开头。
-
变量名是大小写相关的,name 和 Name 是不同的两个变量。
-
变量名不能和C++系统的保留字重复。
-
“数据类型”能够说明一个变量表示什么样的数据(整数,实数,还是字符等)。不同数据类型的变量,占用的存储空间大小不同。除了基本数据类型外,C++还允许程序员自定义数据类型。
C++的基本数据类型
-
int,long,short,char的最高位(最左边)是符号位,为1则表示负数,为0表示非负数。
-
一个字节等于8个比特,即8个二进制位。
用sizeof运算符求变量占用字节数
- sizeof(变量名)和sizeof(类型名)能够得到某个变量或某一类型变量占用的字节数。
# include <iostream>
# include <cstdio>
int main()
{
int n1 = 10;
double f;
char c;
printf("%d, %d, %d, %d", sizeof(n1), sizeof(short), sizeof(double), sizeof(c));
return 0;
}
// 输出4,2,8,1
变量的初始化
-
变量在定义的时候,可以给它指定一个初始值,这叫变量的初始化。
-
没有初始化的变量,其值一般是不确定的。
有符号整数和无符号整数
-
short、int、long、long long 类型的变量,可以表示正数,也可以表示负数,称为有符号的整数类型。
-
unsigned short,unsigned int,unsigned long,unsigned long long类型的变量,只会被看作非负数,称为无符号的整数类型。
有符号整数的表示方式
-
将最左边的位(最高位)看作“符号位”。符号位为0,则表示是非负数,其绝对值就是除符号位以外的部分;符号位为1,则表示是负数,其绝对值是所有位取反(0变1,1变0)后再加1。
-
将一个负整数表示为二进制的方法:
- 设置符号位为1。
- 其余位等于绝对值取反再加1。
数据类型的自动转换
- 有些不同的数据类型之间是相容的,可以互相赋值,这叫数据类型的自动转换。
字符类型到整型的互相转换
-
字符型数据可以转换成整型数据。
-
整型数据也可以转换为字符型数据,但只会留下最右边的一个字节(第0位
到第7位),其他字节丢弃。
// 类型自动转换示例
# include <iostream>
# include <cstdio>
using namespace std;
int main()
{
int n1 = 1378; // 1378的十六进制形式是0x562
short n2;
char c = 'a';
double d1 = 7.809;
double d2;
n2 = c + 1; // n2变为98, 97是'a'的ASCII码
printf("c = %c, n2 = %d\n", c, n2); // 输出c=a, n2=98
c = n1; // n1是0x562, 0x62被当做ASCII码赋值给c, c变为'b'
printf("c = %c, n1 = %d\n", c, n1); // 输出 c=b, n1=1378
n1 = d1; // d1=7.809, 去掉小数部分后赋值给n1, n1变为7
printf("n1 = %d\n", n1); // 输出n1=7
d2 = n1; // d2变为7
printf("d2=%f\n",d2); //输出 d2=7.000000
return 0;
}
常量
什么是常量
-
常量就是在程序运行过程中值不会发生改变,而且一眼就能看出其值的量。
-
常量也可以分成整型,浮点型,字符型,字符串,符号常量。
整型常量
-
十进制整型常量。
-
十六进制整型常量,以“0x”开头,十六进制数中,用A(a)表示10,B(b)表示11 … F(f)表示15。
-
一个十六进制位,正好对应于4个二进制位。
-
八进制整型常量,以0开头。
字符型常量
-
字符型常量表示一个字符,用单引号括起来。
-
字符型常量可用于给char 和unsigned char类型的变量赋值。
-
字符型常量和变量都占一个字节,内部存放的是字符的ASCII编码,ASCII编码是一个0~255的整数。
-
字母和数字的ASCII十进制编码:
- ‘0’~’9’: 48 ~ 57。
- ‘A’~’Z’: 65 ~ 90。
- ‘a’~‘z’: 97 ~ 122。
-
C++中还有一类字符常量,以’‘开头,如’\n’、 ‘\r’、 ‘\t’等,称为“转义字符”。所谓“转义”就是指’'后面的字符被转成别的含义。
字符串常量
-
字符串常量是用双引号括起来的一串字符。
-
“” 也是一个字符串常量,它代表一个空串,即不包含任何字符的字符串。
-
“a” 和‘a’ 是不一样的,前者是只有一个字符的字符串,后者是一个字符,不能用前者给一个char类型的变量赋值。
-
字符串常量里可以包含转义字符。
符号常量
-
为了阅读和修改的方便,常用一个由字母和数字组成的符号来代表某个常量,这样的常量就叫符号常量:#define 常量名 常量值。
-
定义之后,程序中所有出现“常量名” 的地方,就等价于出现的是“常量值”。
-
“常量名” 的命名规则和变量相同,“常量值” 则写什么常量都可以。
-
尽量少使用数值常量,二用符号常量替代它,这样便于修改。