算术表达式-北京大学计算机科学技术研究所
4、运算符与表达式 ——逻辑表达式 使用逻辑运算符和括号将操作数(通常是关系表达式)连接起来的表达式称为逻辑表达式: && (逻辑与):当2个操作数都为非0或真时,结果为1(真),否则结果为0(假),如:(x>1) && (x<=20) || (逻辑或):当2个操作数有一个为非0或真时,结果为1(真),否则结果为0(假),如:(x <=1) || (x>20) ! (逻辑非):将一个非0或为真的操作数变为0,或将0或为假的操作数变为1,如:!(x>y) 逻辑运算&&和||连接的表达式是自左向右求值的,一旦知道结果的真、假值,求值马上停止: (a+1> (右位移),将左侧操作数的二进制数值向右移动若干位(由右侧的操作数给出),移出去的位丢弃,空出的位用符号位(对有符号数)或0(对无符号数)来填补。 4、运算符与表达式 ——位运算表达式 位运算符的操作数必须是整型数据。在C中,整型数据分有符号整数和无符号整数,是用一定长度的二进制位来表示。以32位整数为例来说明位移动运算: 有符号数:有符号整数做位移运算时,符号位是不参与移动的。左移时,空出的位用0填补;右移时,空出的位用符号位填补。(机器内数据的补码表示) 无符号数:没有符号位,不管左移或右移,空出的位用0填补。 位移运算的实质(在不发生溢出时): 左移:x<>n,相当于 x/2n 1 1 1 1 1 … x x 1 1 1 1 0 …1 1 0 1 0 1 1 0 1 … 1 0 1 0 0 0 1 1 … x x 1 右移2位 4、运算符与表达式 ——赋值表达式 “=”是C语言中基本的赋值运算符,基本的赋值表达式形式为:“变量 = 表达式”,它将表达式的值赋给变量。 如: x = y+1, a=b=c=1 C语言中除了基本的赋值运算符外,还有一系列复合赋值运算符: +=,―=,*=,/=,%=,>>=,<<=,&=,^=,|=,它们是由2个运算符组成,相应的赋值表达式形式为: “变量 op= 表达式”,它等价于基本赋值表达式: “变量 = 变量 op (表达式)”,如: x *= 2 等价于 x = x*2 x += y*2 等价于 x = x + (y*2) 4、运算符与表达式 ——条件表达式 C语言中的条件运算符“? : ”可以构成条件表达式,其形式为:“表达式1 ? 表达式2 : 表达式3” 该表达式的求值过程为:先求表达式1的值,若它不等于0(为真),则 求表达式2的值,此时,该值就是整个条件表达式的值;若表达式1的值等于0,则 求表达式3的值,并作为整个条件表达式的值。即表达式2和表达式3之中,只有一个表达式被求值。如 将x和y中最大的值赋给z,可以写成: z = (x>y)? x : y 运算符的优先次序:一个复杂的表达式值,往往要涉及不同的运算符,在表达式求值时,其计算次序是要符合一定的规则的,即不同运算符的先后次序是不同的。(不用死记,复杂表达式中多用“( )”运算符) 1). , -> , [] , () 9) ^ 2)++ , -- , ! , ~ , -, (DataType) , sizeof 10) | 3)* , / , % 11) && 4) + , - 12) || 5) >> , << 13) ?: 6) > , < , >= , <= 14) = , += , -= , *= , /= , 7) == , != %= , ^= , &= , |= 8) & <<= , >>= , 4、运算符与表达式 ——运算符的优先次序 4、运算符与表达式 ——表达式计算中的数据类型转换 在表达式中,整型、实型、字符型数据可以混合运算。运算中,不同类型的数据需要先强制转化为同一类型(利用