1.1.3
求 x = - 3 * 4 % - 6 / 5
因为一元操作符(-)的优先级高于乘除法(*,%,/ 为同一优先级)操作符,故有
x = (-3) * 4 % (-6) / 5
乘除法关联规则为从左到右,故
x =( ( (-3)*4) % (-6) ) / 5
x = (-12 % (-6)) / 5
x = 0
1.2.2
求 x *= y = z = 4 (初始值x = 10)
因为赋值操作符的关联规则为从右到左,故有
x *= (y = (z = 4))
此时z = 4,y = 4,表达式为x *= 4
x = x * 4
x = 40
1.2.4
求 x == (y = z) (初始值x = 1, z = 4)
因为使用了括号(关联操作符),所以赋值操作符优先级大于相等比较
(x == (y = z))
x == y (y=4)
x == 4
FALSE,即0
“==”不改变x的值,故x的值仍然是1
1.3.1
x = x && y || z (初始值x=2,y=1,z=0)
因为逻辑运算符与“&&”的优先级大于逻辑运算符或"||",故有
x = ((x && y) || z)
(x = ((TRUE && TRUE) || z))
x = TRUE || z
因为已有一个值为TRUE,故在逻辑或运算中不管z为何值,表达式结果都为真,因此不再对表达式继续计算
x = TRUE
x = 1
1.3.3
z = x ++ -1 (初始值为x=1,y=1 )
因为"++"为一元操作符,故有
(z = ((x++) -1))
因为是后置"++",先求表达式后求值
z = 1 - 1 = 0
此时x = 2
1.3.4
z += - x ++ + ++ y(初始值x=2,y=1,z=0)
因为一元操作符的关联规则为从右到左,故有
z +=( (-(x++)) + (++y) )
z +=(-2) + 2
z = 0
此时x = 3,y = 2
1.4.3
x ^ y & ~ z(初始值为x=03,y=02,z=01)
因为位操作符优先级"&" > "^" > "|",故有
( x ^ ( y & (~z)))
03 = 0000 0011
02 = 0000 0010
01 = 0000 0001
因为
故原式结果为
11 ^ 10 = 01(异或相同为0,相异为1)
1.5.3
z += x < y ? x++ : y++(初始值为x=3,y=3,z=1)
因为条件操作符的优先级大于赋值操作符,故有
(z +=( (x < y) ? x++ : y++))
(z +=(FALSE ? x++ : y++))
(z += (y++))
z += 3
z = 4,此时y = 4,x = 3(x++没有被求值)
1.5.5
z >= y && y >= x(初始值为x=3,y=z=4)
((z >= y) && (y >= x))
(TRUE && TRUE)
(TRUE)
即1
1.6.3
++x || ++y && ++z(x=y=z=-1)
((++x) || ((++y) && (++z)))
(False || (False &&(++z))),此时x=y=0,z=-1
(False || False)
False
即0
此时x=y=0,z=-1