zoukankan      html  css  js  c++  java
  • C和指针笔记-第5章 操作符和表达式

    这是我读《C和指针》第5章做的笔记,复习一下C语言中各种各样的操作符,希望能对你有所帮助。

    • 位移操作符 >>、<<  

    左移位操作符为<<,右移位操作符为>>。左操作数的值将移动由右操作数指定的位数。两个操作数都必须是整型类型。

    标准说明无符号值执行的所有移位操作都是逻辑移位,但对于有符号值,到底是采用逻辑移位还是算术移位取决于编译器。因此,一个程序如果使用了有符号数的右移位操作,它就是不可移植的。

    • 位操作符 & | ^

    要求操作数为整数类型,它们对操作数对应的位进行指定的操作,每次对左右操作数的各一位进行操作。

    假定变量a的二进制值为00101110,变量b的二进制值为01011011,a&b的结果是00001010,alb的结果是01111111,a^b的结果是011110101(相同为0,不同为1)

    • sizeof操作符

    sizeof操作符判断它的操作数的类型长度,以字节为单位表示。操作数既可以是个表达式(常常是单个变量),也可以是两边加上括号的类型名。

    sizeof(a=b+ 1)没有向a赋任何值。

    • 增值操作符++

    ++或--操作符只能作用于可以位于赋值符号左边的表达式

    抽象地说,前缀和后缀形式的增值操作符都复制一份变量值的拷贝。前缀操作符(++a)在进行复制之前增加变量的值,后缀操作符(a++)在进行复制之后才增加变量的值。这些操作符的结果不是被它们所修改的变量,而是变量值的拷贝,认识这一点非常重要。

    • 关系操作符

    这些操作符产生的结果都是一个整型值,而不是布尔值。在C中,你必须使用双等于号==来执行比较。

    • 逻辑操作符

    &&操作符的左操作数总是首先进行求值,如果它的值为真,然后就紧接着对右操作数进行求值。如果左操作数的值为假,那么右操作数便不再进行求值,因为整个表达式的值肯定是假的,右操作数的值已无关紧要。

    ||操作符也具有相同的特点,它首先对左操作数进行求值,如果它的值是真,右操作数便不再求值,因为整个表达式的值此时已经确定。这个行为常常被称为“短路求值”

    • 逗号操作符

    逗号操作符将两个或多个表达式分隔开来。这些表达式自左向右逐个进行求值,整个逗号表达式的值就是最后那个表达式的值。

    • 总结

    1. 有符号值的右移位操作是不可移植的。

    2. 位操作的位数是个负值容易得到匪夷所思的结果。

    3. 连续赋值中各个变量的长度不一可能会损失精度。

    4. 误用=而不是==进行比较。

    5. 误用|替代||,误用&替代&&。

    参考:C和指针(第二版) 美〕Kenneth A.Reek著  徐波译   人民邮电出版社

  • 相关阅读:
    AcWing 157. 树形地铁系统 (hash判断树同构)打卡
    AcWing 156. 矩阵 (哈希二维转一维查询)打卡
    AcWing 144. 最长异或值路径 01字典树打卡
    AcWing 143. 最大异或对 01字典树打卡
    AcWing 142. 前缀统计 字典树打卡
    AcWing 139. 回文子串的最大长度 hash打卡
    AcWing 138. 兔子与兔子 hash打卡
    常用C库函数功能及用法
    编程实现C库函数
    C语言面试题5
  • 原文地址:https://www.cnblogs.com/XIEjm/p/12918047.html
Copyright © 2011-2022 走看看