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著  徐波译   人民邮电出版社

猜你喜欢

转载自www.cnblogs.com/XIEjm/p/12918047.html
今日推荐