基本运算

•【1】算数运算:加、减、乘、除、整除、求余
•【1】关系运算:大于,大于等于,小于,小于等于,等于,不等于
•【1】逻辑运算:与(&&)、或(||)、非(!)
•【1】变量自增与自减运算
•【1】三目运算

有符号越界是 Undefined Behavior

例子:判断两个数字和是否越界

除法和取模取整方向问题

不同类型的数字做运算

整数之间运算,至少转成 int 类型
整数和浮点数做运算转成浮点数
有符号数和无符号数进行运算转无符号

易错点:有符号数和无符号数进行运算

德摩根定律

! (a && b) 等价于 !a || !b
! (a || b) 等价于 !a && !b

短路表达式

i < a.size() && a[i] == 0
如果 && 的第一个条件不成立,就不会计算第二个条件
如果 || 的第一个条件成立,就不会计算第二个条件

三目运算符与运算符优先级

// 这个写法在C和C++中都可以编译通过
int F(int x)
{
	return f[x] != x ? f[x] = F(f[x]) :x;
}

// 这个写法只能在C++中编译通过
// 这种写法在 C语言中 编译错误
int F(int x)
{
	return f[x] == x ? x : f[x] = F(f[x]); 
	return (f[x] == x ? x : f[x]) = F(f[x]); 
}

自增自减与未定义行为

++i + ++i + ++i

同余

(a + b) % p = (a % p + b % p) % p
(a - b) % p = (a % p - b % p) % p
(a * b) % p = (a % p * b % p) % p

0的0次方

数学上认为无意义
编程中认为是1

  1. 基本运算
    1. 有符号越界是 Undefined Behavior
    2. 除法和取模取整方向问题
    3. 不同类型的数字做运算
    4. 易错点:有符号数和无符号数进行运算
    5. 德摩根定律
    6. 短路表达式
    7. 三目运算符与运算符优先级
    8. 自增自减与未定义行为
    9. 同余
    10. 0的0次方