【例2】(2000年4月) 设 int x=1,y=1; 表达式(!x||y--)的值是( )。
A. 0 B. 1 C. 2 D. -1
【答案】B
【考点解析】在这一题中,我们要注意的是--或++的位置,在这里y--是指先把y与!x进行或运算,后y再减1,那么这个表达式的值是1。如果--y是指y减1后再与!x进行或运算。
【例3】(2000年4月) 设int b=2;表达式(b>>2)/(b>>1)的值是( )。
A. 0 B. 2 C. 4 D. 8
【答案】A
【考点解析】移位运算是用于一个整数的二进制数向左或向右移动。先是把b化成二进制,再右移两位,则是0;而右移一位,则是1,所以整个表达式的结果是0。
【例4】(2000年9月) C语言中运算对象必须是整型的运算符是( )。
A. %= B. / C. = D. <=
【答案】A
【考点解析】在C语言程序设计中“%”是表示求余运算,是必须是整形的数据类型,而其它三种运算符的运算对象可以是整形也可以是其它数据类型。
【例5】(2000年9月) 若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是( )。
A. 1 B. 2 C. 2.0 D. 2.5
【答案】B
【考点解析】在这一题中,我们清楚C语言中的自动数据类型的转换,在这里3/2是整形除以整形,所以结果自动转换成整形,再加上1,所以最后结果是2。
【例6】(2001年9月) 整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是( )。
A. x || y B. x | y C. x & y D. x ^ y
【答案】D
【考点解析】||是C语言的逻辑或运算符,表示只要有一个表达式为真,则整个表达式都为真;|是按位或运算符,先是把操作数转化成二进制,再按位进行或运算;&是按位与运算符,先是把操作数转化成二进制,再按位进行与运算;^是按位异或运算符,先是把操作数转化成二进制,再按位异或运算,就是相同的为0,不同的为1。
【例7】(2002年9月) 已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是( )。
A. 6 B. 0 C. 2 D. 1
【答案】D
【考点解析】在本题中,优先级最高的是括号,因此先计算x+y,跟着是!的优先级高,即运算!(x+y),接着是/ 的优先级高,即运算z/2,再是+、-的运算符优先级,在本表达式中优先级最低的是&&,最后的结果是1。