三目运算搞不懂

FLlly 5 天前提问
1
printf("%c",(a)&(a-1)?'n':'y');

大神们帮我看一下

4个回答

5

已采纳

判断a是不是2的幂,具体解释见http://blog.csdn.net/navyifan...

1

三元运算符其实很简单,a?'n':'y' 当a为真时,值等于n。当a为假时,值等于y。在你这个表达式中,包含&运算符。&两边操作数对应位上全为1时,结果的该位值为1。否则该位值为0
比如
0x12&0x23 转为二进制为:B00010010&B00100011,按位计算结果为B00000010,即结果为0x02。

1

三目运算的语法你应该是懂得,你应该想问 n & (n-1)什么意思吧?
&是将两边的数字二进制的每一位进行与运算,n & (n-1)用于判断一个数是不是能被2整除(O(1)的时间内),
比如
n = 3, n = 0b11, n - 1 = 0b10, n & (n - 1) = 0b10, 不为0,不能被2整除;
n = 4, n = 0b100, n - 1 = 0b011, n & (n-1) = 0b000, 为0,能被2整除

0

&按位与运算符
0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1。
即同为 1 的位,结果为 1,否则结果为 0。

a?x:y 表示 a为真,表达式值为x;a为假,表达式值为y

撰写答案

相似问题