- C语言大约有40个运算符
sizeof运算符和size\_t类型
- sizeof运算符以字节为单位返回运算对象的大小
- C语言规定,sizeof返回size\_t类型的值,这是一个无符号整数类型,但它不是新类型。size\_t是语言定义的标准类型
- C有一个typedef机制,允许为现有类型创建别名。C头文件系统可以使用typedef把size\_t作为unsigned int的别名
- C99使用%zd转换说明用于size\_t类型的值
求模运算符:%
- 求模运算符(modulus operator)用于整数运算。求模运算符给出其左侧整数除以右侧整数的余数(remainder)
- 求模运算符只能用于整数,不能用于浮点数
- 负数求模:如果第一个运算对象是负数,那么求模的结果为负数;如果第一个运算对象是正数,那么求模的结果也是正数
- a-(a/b)*b来计算a%b
递增运算符:++
- 递增运算符(increment operator)执行简单的任务,将其运算对象递增1
- ++出现在其作用的变量面前,这是前缀模式;++出现在其作用的变量后面,这是后缀模式。两种模式的区别在于递增行为发生的时间不同
把变量的递增过程放入while循环的条件中,可以充分利用递增运算符的优势
- while循环工作,变量值递增后在和右值比较,把左值初始值-1,因为第一次求值之前,变量已经递增1了
- 好处:使程序更加简洁;把控制循环的两个过程集中在一个地方,生成的机器语言代码效率更高。记得避免无限循环(infinite loop);坏处:降低了代码可读性,容易产生计数错误
- 单独使用递增运算符时,使用哪种形式都没关系。当运算符和运算对象时更复杂表达式的一部分时,使用前缀和后缀效果不同
递减运算符:--
- 每种性质的递增运算符都有一个递减运算符(decrement operator)与之对应,用--代替++即可。
优先级
- 递增运算符和递减运算符都有很高的结合优先级,只有圆括号的优先级比它们高。因此x*y++表示的是(x)*(y++)。因为递增和递减运算符只能影响一个变量,而组合x*y本身不是可修改的左值
- 不要混淆这两个运算符的优先级和它们的求值顺序。n++:先使用再递增;++n:先递增再使用
不要自作聪明
- 如果一个变量出现在一个函数的多个参数中,不要对该变量使用递增或递减运算符
- 如果一个变量多次出现在一个表达式中,不要对该变量使用递增或递减运算符
最后修改:2024 年 03 月 12 日
© 允许规范转载