《重学C++》3. C++的运算符与表达式
1. 利用assert的性质验证德·摩根律。
**assert()**:当且仅当括号内的运算结果为真时,程序可以正常运行;否则程序出错退出。
在开发过程中,经常会用到assert函数进行调试。
例如验证加法函数plus(1,1)返回的函数值是否为预期结果2,可以写成:
assert( plus(1,1) );
如果程序正常运行,说明函数正常。
2. 运算符
有几个运算符比较少见,简单记录一下:
1 | <<=:左移且赋值运算符。c<<=2等同于c=c<<2; |
关于移位,一种特殊用法是对2^n取余。
m-(m>>1<<1); //对2取余
m-(m>>n<<n); //对2^n取余
这种方法取余要比%取余效率更高,主要用在对性能要求很高的场合。大学一个室友曾在一个实验室呆过,这个实验室主要负责图像处理方向。他们开发用的语言是C,理由是C++速度不够快(python之类就更不用提了),甚至取余都是用这种方法来代替%。
关于运算符:一般来说,一元运算符优先级高于二元运算符
3. 注释的注意事项
好的代码和注释本身就是最好的注释。如果代码很清楚,那么不需要注释;
在重要代码处,最好先写注释再写代码,有利于思路清晰和保证代码注释一致性;
注释不是越多越好,它是对代码的提示,要写就要写清楚,并且需要保持代码和注释的一致性,更新代码也要更新注释。
第三章课后练习
一. 填空题(必做)
下面每行程序输出结果是分别是什么 (涉及知识点: 3-7 sizeof 2-2 数据类型)
1
2
3
4
5cout sizeof(char) endl; __1_
cout sizeof(short) endl; _2__
cout sizeof(int) endl; _4__
cout sizeof(float) endl; __4_
cout sizeof(double) endl; __8_下面程序输出结果是分别是什么 (涉及知识点:3-1 算术运算符,3-5赋值运算符, 3-7 sizeof , 逗号运算符)
1
2a = (x=10,y=20,z=x+y);
cout<<a<<endl; _30__下面程序输出结果是分别是什么 (涉及知识点: 3-7 sizeof, 点运算符 )
1 | typedef struct{ |
二. 编程题(必做)
使用#define编写一段代码,来实现“标准”宏MIN?(涉及知识点: 2-6 宏定义 3-3关系运算符 3-7 运算符优先级)
1
切记一定要加上括号,因为a、b可能是一个表达式,直接代入a<b?a:b中可能会因为优先级而改变原本意图。
分别写出bool 、int、 float、与“零值”比较,表达式返回值等于1的代码片段;(涉及知识点: 3-1表达式 3-3关系运算符 3-4 逻辑运算符 2-2 数据类型 )
1
2
3
4
5
6
7bool a = 1;
int b = 1;
float c= 1;
assert(a>0);
assert(b>0);
assert(c>0);