3.1简单变量
3.1.1 变量名
1、命名规则
- 在名称中只能使用字母、数字和下划线(_)
- 名称的第一个只能是字母或者下划线
- 区分大写和小写字符
- 不能将C++关键字用作名称
- 以两个下划线开头或以下划线和大写字母开头的名称被保留实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
- C++对于名称长度没有限制,名称中所有的字符都有意义,但有些平台有长度限制。
对于倒数第二点,使用像_time_stop或_Donut这样的名称不会导致编译器出错,而会导致行为的不确定性。不知道结果将是什么。不导致编译器出错的原因是,这样的名称不是非法的,但要留给保留使用。简单的说,不要用这样的命名方式。
3.1.2 整型
1、什么是整数?
整数就是没有小数部分的数字。由于整数有很多,有限的计算机内存不能表示所有的整数。因此,C++语言中只能表示所有整数的一个子集,不能表示所有。
2、术语宽度(width)
术语宽度用于描述存储整型时使用的内存量。
3、C++基本整型
C++基本整型分别是char,short,int,long,long long,其中每种类型都有无符号和有符号版本,所以,一共有10种类型可供选择。
3.1.3 整型short、int、long和long long
1、位(bit)与字节(byte)
计算机的基本内存单位是位(bit),只有0和1两种数值。但是每一位都可以有两种设置,所以8位的内存块可以设置出256种不同的组合,即2x2x2x2x2x2x2x2=256。因此,8位单元可以表示0~ 255或者 -128~127。
字节(byte)通常指的是8位的内存单元。字节用于描述计算机内存量的度量单位。1KB = 1024字节。在C++中,字节由至少能够容纳实现的基本字符集的相邻位组成,也就是说可能取值的数目必须等于或者超过字符数目。C++字节通常是8位。
2、C++整型的最小长度
- short至少16位
- int至少与short一样长
- long至少32位,且至少与int一样长
- long long至少64位,且至少与long一样长
3、sizeof运算符
sizeof运算符返回类型或者变量的长度,单位为字节。sizeof运算符指出在8位系统中int占4个字节
cout<<"int is "<<sizeof(int);
4、#define预处理器编译指令
#define INT_MAX 32767
在C++编译过程中,首先将源代码传给预处理器。该编译指令告诉预处理器:在程序中查找INT_MAX 替换成 32767。预处理器只会查找独立的标记(单独的单词),跳过嵌入的单词,如:PINT_MAX 不会被替换成P32767。
5、初始化
初始化将赋值和声明合并在一起。
int uncles = 5; // C语言的初始化
int wrens(432); //C++初始化
/* C++ 11 初始化*/
int hamburgers = {24};
int emus{7};
int psychics{}; // =0
6、为什么需要更多的初始化方法?
原因是让新手更容易学习C++。以前,C++使用不同的方法初始化不同的类型,初始化类变量的方式不同于初始化常规结构的方式,初始化常规结构的方式又不同于初始化简单变量的方式。 通过使用C++新增的大括号初始化器,初始化常规结构的方式与初始化类变量的方式更像。C++11使得大括号初始化器可用于任何类型。
3.1.4 无符号类型
1、什么是无符号类型
无符号类型是不能存储负数值的类型,其优点是可以增大变量能够存储的最大值。例如,short的范围是-32768~ 32767,而unsigned short的范围0~ 65535。
2、什么时候使用无符号类型
仅当数值不为负数的时候才使用,如人口、粒数等。要创建无符号类型版本的基本整型,只需要使用关键字unsigned来修改声明即可
unsigned short change; //无符号short
unsigned int rovert;//无符号int
unsigned quarterback;//也是无符号int
unsigned long gone;//无符号long
unsigned本身是unsigned int的缩写
3、一些注意事项
#include<iostream>
#include<string>
#include<climits>
using std::cout;
using std::endl;
int main()
{
short n = SHRT_MAX;
cout << n << endl;
n++;
cout << n << endl;
unsigned short j = 0;
j--;
cout << j;
return 0;
}
可以看到,n的值从32767变成了-32768,而j的值从0变成了65535。可以看出,整型变量的行为就像里程表。如果超过了限制,其值将在范围另一端取值。**C++确保了无符号类型的这种行为;但C++不确保符号整型超越限制时不出错。
3.1.5 选择整型类型
1、C++提供了大量的整型,如何选择?
- 通常,int被设置为目标计算机最为“自然”的长度。自然长度指的是计算机处理起来效率最高的长度。如果没有非常有说服力的理由来选择其他类型,则应使用int。
- 如果变量不为负数,则可以使用无符号类型。
- 如果知道变量可能表示的值大于16位整数的最大可能值,则使用long。即使系统上int为32位,也应这样做。这样,将系统移植到16位系统时,就不会突然无法正常工作(在32位系统和16位系统中,int的大小是不一样的,32位系统int占4个字节,16位系统中int只占2个字节)。
- 如果要存储的值超过20亿,则使用long long。
- 由于short比int小,使用short可以节省内存。通常,仅当有大型整数数组时,才有必要使用short。如果节省内存很重要,则应使用short而不是使用int。当int从16位系统移植到32位系统时,内存量会增大一倍,而short不会。
- 如果只需要一个字节,则使用char。
3.1.6 整型字面值
1、C++的计数方式
- 十进制:如果第一位是1~9,基数为10,逢十进一。
- 八进制:如果第一位是0,基数为8,逢八进一。
- 十六进制:如果前两位是0x或0X,基数为16,逢十六进一。
2、cout的默认输出
cout默认情况下输出为十进制。当然也可以通过代码修改。
#include<iostream>
#include<string>
#include<climits>
using std::cout;
using std::endl;
int main()
{
int n = 20;
cout <<"十进制:" << n << endl; //默认输出十进制
cout << std::hex;//输出修改为十六进制
cout << "十六进制:" << n <<endl;
cout << std::oct;//输出修改为八进制
cout << "八进制:" << n;
return 0;
}
cout << std::hex;不会在屏幕上打印内容,只是修改cout显示整数的方式。hex是十六进制,oct是八进制,dec是十进制。
3.1.7 C++如何确定常量
- 除非有理由存储为其他类型,否则C++将常量整型存储为int类型。
- 看后缀。后缀是放在数字常量后面的字母,用于表示类型。整数后面的l(L的小写)或L后缀表示该整数位long常量,u或者U后缀表示unsigned int常量,ul表示 unsigned long常量,ull表示unsigned long long。
- 考察长度。