C++PrimerPlus第三章学习笔记

1 变量命名规则

1 名称中只能它包含字母、数字或者下划线

2 名称的第一个字符不能是数字

3 区分字符的大小写

4 不能将C++本身的关键字作为自定义变量名

2 位与字节

计算机的基本内存单元是位(bit),用二进制数字1和0表示。字节(byte)通常指8位的内存单元。字节也就是描述计算机内存量的度量单位,1Kb=1024字节,1MB=1024Kb。但是C++对于字节的定义与此不同。C++字节由至少能够容纳实现的基本字符集的相邻位组成,也就是说,可能取值的数目必须等于或超过字符数目。

int n_int = INT_MAX;
short n_short = SHRT_MAX;
long n_long = LONG_MAX;
long long n_llong = LLONG_MAX;
// sizeof operator yields size of type or of variable
cout << "int is " << sizeof(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 << "Maximum values: " << endl;
cout << "      int: " << n_int << endl;
cout << "    short: " << n_short << endl;
cout << "     long: " << n_long << endl;
cout << "long long: " << n_llong << endl;

上述代码块的输出为:

int is 4 bytes.
short is 2 bytes.
long is 4 bytes.
long long is 8 bytes.
Maximum values:
      int: 2147483647
    short: 32767
     long: 2147483647
long long: 9223372036854775807

3 整型溢出

C++PrimerPlus第三章学习笔记_第1张图片

4 char类型

char来行也是一种整型,它是专门为存储字符(如字母和数字)而设计的。通常我们用char类型来处理字符,但是有时候我们也可以用它作为比short更小的整数。

char ch = 'M';
int n_ch = ch;
cout << "The ASCII code for " << ch << " is " << n_ch << endl;
cout << "Add one to the character code:" << endl;
ch = ch + 1;
n_ch = ch;
cout << "Now, the ASCII code for " << ch << " is " << n_ch << endl;
cout << "Minus 5 from the chractor ch:" << endl;
ch = ch - 5;
n_ch = ch;
cout << "Now, the ASCII code for " << ch << " is " << n_ch << endl;

上述代码块的输出结果为:

The ASCII code for M is 77
Add one to the character code:
Now, the ASCII code for N is 78
Minus 5 from the chractor ch:
Now, the ASCII code for I is 73

5 浮点数 

浮点数,顾名思义,可以表示带小数部分的数字。

第一种表示法为标准的小鼠表示法,例如6.66,13.14,0.0001。

第二种表示法为科学记数法,例如 2.33e+4, -1.23e-6,一般我们用科学记数法表示很大或者很小的数。

浮点数可以表示整数之间的数值,而且因为缩放因子的存在,他们表示的范围数大得多。但是,浮点数的运算速度通常会比整型数慢,而且会存在精度降低的问题。

float a = 2.34E+12f;
float b = a + 1.0f;
std::cout << "a = " << a << std::endl;
std::cout << "b -a =  " << b-a << std::endl;

上述代码的输出为:

a = 2.34e+12
b -a =  0

本来(b-a)应该等于一,但是实际输出结果为零。问题在于2.34E+12是一个小数点左边有13的数字,加上一,就是第十三位加上一。然而float类型只能表示数字中的前六位或者前七位。因此修改第十三位的数值并不会对这个值有任何影响。

6 C++算术运算符

五种基本的C++算术运算符:

‘+’ 加法运算符,执行加法运算。

‘-’ 减法运算符。

‘*’ 乘法运算符

‘/’除法运算符,用第一个数除以第二个数。

‘%’ 求模运算符,生成第一个数除以第二个数后的余数。需要注意的是两个操作数都必须是整数,是浮点数就会报错。

运算符的优先级问题,不再赘述。

7 类型转换

C++丰富的类型允许根据需求选择不同的类型,当不同的数值类型参与运算时,C++为了避免混乱,会进行以下三种自动类型转换。

1 将一个算术类型的值赋值给另一个算术类型的值。

2 表达式包含不同的类型时

3 将参数传递给函数时

当C++进行自动类型转换时,存在一些潜在的问题,比如将较大精度的浮点数类型转换为精度较低的浮点数类型,这会导致精度下降。又或者将浮点数转换为整型数,这将使得小数部分消失。又或者将较大的整型数转换为较小的整型数时,原来的数值可能超过目标类型数的取值范围。

除了C++自动类型转换外。C++还允许用户进行强制类型转换。通用化格式为 typename(value)。强制类型转换不会修改原变量本身,而是创建一个新的,制定类型的值。

你可能感兴趣的:(C++PrimerPlus)