OI每日打卡——GESP选择题真题“(a & (~3))”的分析
###原题如下:###
如果a为int类型的变量,下列那个表达式可以正确求出满足“小于等于a且是4的倍数”的整数中最大的?()
A.(a & (~3))
B.((a << 2) >> 2)
C.(a ^ 3)
D.((a - 1) | 3) + 1
题目分析:
由于符合题目要求的式子有很多所以本题用代入法来做
对于选项A
先将常数值~3算出来由于a的二进制不一定有多少位所以我们先拟定3的二进制为00……0011,再按位取反得到11……1100,我们先尝试6,6的二进制是110有3位,所以之前拟定时三的位数也变为三位,取反后得到100,再与110按位与得到100,转为十进制后为4,符合原题。
对于选项B
这个式子相当于把a的二进制后面增加两个零再减少两个零,与原题不符还会溢出。
对于选项C
是求a的3次方,也与原题不符。
对于选项D
在尝试9的时候a - 1 = 8,8 的二进制是1000,1000 与3的二进制11按位或后求出1011,十进制下为11,11 + 1 = 2,与原题不符,正确答案为8。
所以答案为A。
以下为图片解析