C和指针学习笔记--第五章

1.移位操作符:<<和>> 操作数必须是整型
逻辑移位:左边移入的位用0填充
算术移位:左边移入的位由原先该值的符号位决定
逻辑左移与算术左移是相同的,逻辑右移与算术右移是不同的,而且只有操作数为负数时才不一样。标准说明无符号数的执行的所有移位操作都是逻辑移位,但是,对于有符号数,采用哪种移位方式取决于编译器。有符号值的右移位操作是不可移植的。
2.位操作符:& | ^ 操作数必须是整型
把指定位置设置为1:value = value | 1 << bit_number
把指定位置设置为0:value = value & 1 << bit_number
对指定位置进行测试:value = value & 1 << bit_number
3.赋值:赋值也是一种表达式,是表达式就有值
连续赋值中个变量各类型的长度不一致导致的截取问题。
复合赋值符:左操作数只求值一次,右操作数在执行复合赋值操作之前即被求值,即使它的优先级低于复合赋值操作。尽量使用复合赋值符。
4.单目操作符:
sizeof的操作数既可以是表达式(表达式不进行求值操作),也可以是类型名。
(类型)将强制类型转化放在一个表达式前面只会改变表达式的第一个项目类型。
抽象地讲,前缀和后缀形式的增值操作都复制一份变量的拷贝,用于周围表达式的值正是这份拷贝。对于前缀操作符在复制之前增加变量的值,后缀操作符在进行复制操作之后才增加变量的值。
5.关系操作符:这些操作符的结果都是整型值
推荐使用的判断方式:
if( expression ){ }
if( !expression ){ }
6.逻辑操作符:&&和||会控制子表达式的求值顺序
短路求值。
7.条件操作符:?:优先级非常低,通常与复制操作符一起使用。
8.逗号操作符:逗号操作符将两个或者多个表达式分隔开来,这些表达式自左向右逐个求值,最后一个表达式的值就是整个逗号表达式的值。
9.布尔值:0是假,任何非零值是真。
#define TRUE 1
#define FALSE 0
避免混合使用整型值和布尔值。
10.左值和右值
左值:标示内存中一个特定的位置的标识。
右值:不能标示内存中一个特定的位置的标识。
左值意味一个位置,右值意味一个值,在使用右值的地方也可以使用左值,在需要左值的地方不可以使用右值。
11.优先级和求值顺序
两个相邻的操作符的执行顺序由他们的优先级决定。如果优先级相同,它们的执行顺序由它们的结合性决定。除此之外,编译器可以自由决定使用任何顺序的对表达式进行求值,只要它不违背逗号、&&和||和?:施加限制。


原文地址:https://www.cnblogs.com/anitaguangzi/p/13849269.html