C语言解惑第一章--操作符

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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值