• 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 日