C++学习笔记,第三章
3 处理数据
3.1简单变量
3.1.1 变量名
C++变量名的命名规则。
- 在名称中只能使用字母字符、数字和下划线(_)。
- 名称的第一个字符不能是数字。
- 区分大写字符和小写字符。
- 不能将C++关键字用作名称。
- 以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
- C++对于名称的长度没有限制,名称中所有的字符都有意义,但有些平台有长度的限制。
3.1.2 整型
C++中基本整型(按宽度递增的顺序排序)分别是char、short、int、long
和C++11新增的long long
。其中每种类型都有符号版本和无符号版本,因此共有中类型可供选择。
这里涉及到《计算机系统基础》中的数据的长度和宽度。
首先我们要知道计算机内部的任何信息都可以用二进制码(0和1)来表示,而一个二进制表示一个bit(比特)。在二进制信息的计量单位是 ”字节“(Byte)。
1 Byte = 8 bit
3.1.3 整型short、int、long
和long long
在C++的标准中,C++提供了一种比较灵活的标准,它确保了最小长度(从C语言借鉴而来)
short
至少16位;int
至少与short
一样长long
至少32位,且至少与int一样长;long long
至少为64位,且至少与long一样长。
#include<iostream>
#include<climits>
using namespace std;
int main(){
int n_int = INT_MAX; //initialize n_int to max int value
short n_short = SHRT_MAX; //symbols defined in climits file
long n_long = LONG_MAX;
long long n_llong = LLONG_MAX;
//sizeof operator yields size of type or of variable
cout << "int is " << sizeof n_int << " bytes." << endl;
cout << "short is " << sizeof n_short << " bytes." << endl;
cout << "long is " << sizeof n_long << " bytes." << endl;
cout << "long long is " << sizeof n_llong << " bytes." << endl;
cout << endl;
cout << "Maximum Values: " << endl;
cout << "int: " << n_int << endl;
cout << "short: " << n_short << endl;
cout << "long: " << n_long << endl;
cout << "long long: " << n_llong << endl << endl;
cout << "Minimum int value = " << INT_MIN << endl;
cout << "Bits per byte = " << CHAR_BIT << endl;
system("pause");
}
// Author: 崔小葵
// Date: 2020-10-13
注意:unsigned
本身是unsigned int
的缩写。
这里面的运算规则如下:
1 Byte = 8 bit;
由于上面的代码片段中没有unsigned
,说明上述数字都是有符号数,《计算机系统基础》中说明了,有符号数的二进制表示中首位为符号位(0为正数,1代表负数)。
以上面的1 Byte为例,有符号数的二进制表示中,共有8位,每一位由0和1组成。
则无符号数能表示的范围是【0 ~ 28】=【0 ~ 256】;
而有符号数能表示的范围是【-27 ~ 27-1】=【-128 ~127】这里有个0也要加进去。
注意:如果你的系统不支持类型long long,应删除该类型的代码行。
1. 运算符sizeof
和头文件limits
对类型名或变量名使用sizeof
运算符,**对类型名(如int
)使用sizeof运算符时,应将名称放在括号中;但对变量名(如n_short
)使用该运算符,括号是可选的;
#include<iostream>
#include<climits>
using namespace std;
int main(){
int n_int = INT_MAX;
cout << "int is " << sizeof (int) << " bytes." << endl;
cout << "int is " << sizeof n_int << " bytes." << endl;
system("pause");
}
//Author: 崔小葵
//Date: 2020-10-14
从上述程序中我们看到两者输出的结果都是一样的。
climits 中的符号常量 |
---|
符号常量 | 表示 |
---|---|
CHAR_BIT | char的位数 |
CHAR_MAX | char 的最大值 |
CHAR_MIN | char 的最小值 |
SCHAR_MAX | signed char 的最大值 |
SCHAR_MIN | signed char 的最小值 |
UCHAR_MAX | unsigned char 的最大值 |
SHRT_MAX | short 的最大值 |
SHRT_MIN | short 的最小值 |
USHRT_MAX | unsigned short 的最大值 |
INT_MAX | int 的最大值 |
INT_MIN | int 的最小值 |
UNIT_MAX | unsigned int 的最大值 |
LONG_MAX | long 的最大值 |
LONG_MIN | long 的最小值 |
ULONG_MAX | unsigned long 的最大值 |
LLONG_MAX | long long 的最大值 |
LLONG_MIN | long long 的最小值 |
ULLONG_MAX | unsigned long long 的最大值 |
2.初始化
初始化将赋值与声明合并在一起。
int n_int = INT_MAX;
上述语句声明了变量n_int,并将int的最大取值赋给它;
同时也可以这样赋值
int a = b = 5;
上述语句中是将5赋值给b,再将b(b的值为5)赋值给a;
3.C++11初始化方法
还有另一种初始化方法,这种方式用于数组和结构,但在C++98中,也可用与单值变量。
#include<iostream>
using namespace std;
int main(){
int num1 = {24};
int num2 {32};
int num3 {};
int num4 = {};
cout << "num1 = " << num1 << endl ;
cout << "num2 = " << num2 << endl ;
cout << "num3 = " << num3 << endl ;
cout << "num4 = " << num4 << endl ;
system("pause");
}
//Author: 崔小葵
//Date:2020-10-14
通过上述代码的运行示意图,我们可以知道大括号内可以不包含任何东西。在这种情况下,变量将被初始化为零。
3.1.4 无符号类型
#include<iostream>
#include<climits>
#define ZERO 0
using namespace std;
int main(){
short sam = SHRT_MAX;
unsigned short sue = sam;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited." << endl << "Add $1 to each account." << endl << "Now ";
sam = sam + 1;
sue = sue + 1;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited.\nPoor Sam!" << endl;
sam = ZERO;
sue = ZERO;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited." << endl;
cout << "Take $1 from each account." << endl << "Now ";
sam = sam - 1;
sue = sue - 1;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited." << endl << "Lucky Sue!" << endl;
system("pause");
}
// Author: 崔小葵
// Date: 2020-10-14
从上述代码运行结果中,我们可以看到:
- 我同时定义了一个短整型和一个无符号数的短整型,同时将短整型设置为最大值。再将短整型赋值给无符号的短整型。
(最大值的求法是:在我的电脑上,短整型为2byte,即16bit。
则无符号数的短整型的取值范围为【0 ~ 216】 = 【0 ~ 65536】。
短整型的取值范围为 【215 ~ 215- 1】= 【32768 ~ 32767】。 - 所以同时加一后,有符号数会从重置点回到-32768。而无符号数则是直接加1。
3.1.5 整形字面值
#include<iostream>
using namespace std;
int main(){
int chest = 42; //十进制
int waist = 0x42; //十六进制
int inseam = 042; //八进制
cout << "Monsieur cuts a striking figure!\n";
cout << "chest = " << chest << " (42 in decimal)\n";
cout << "waist = " << waist << " (0x42 in hex)\n";
cout << "inseam = " << inseam << " (042 in octal)\n";
system("pause");
}
// Author: 崔小葵
// Date: 2020-10-15
#include<iostream>
using namespace std;
int main(){
int chest = 42;
int waist = 42;
int inseam = 42;
cout << "Monsieur cuts a striking figure!" << endl;
cout << "chest = " << chest << " (decimal for 42)" << endl;
cout << hex; // manipulator for changing number base
cout << "wasit = " << waist << " (hexadecima for 42)" << endl;
cout << oct;
cout << "inseam = " << inseam <<" (octal for 42)" << endl;
system("pause");
return 0;
}
// Author: 崔小葵
// Date: 2020-10-17
从上述代码运行结果我们可以看出,在莫仍情况下,cout是以十进制显示整数,如果要以十六进制或八进制,则可以使用诸如cout << hex
;等代码,这些代码是不会再屏幕上显示任何内容,而只是修改cout
显示整数的方式。因此,控制符hex
实际上是一条消息,告诉cout
采取何种行动。
3.1.6 char类型:字符和小整数
char类型是专门存储字符(如字母和数字)而设计的。
char类型是另一种整型。他足够长。能够表示目标计算机系统中所有基本符号——所有的字母、数字、标点符号等。