我在读查尔斯·佩佐尔德的《Windows编程程序》。我一度陷入困境。有句台词:
cxCaps=(tm.tmPitchAndFamily & 1?3:2)*cxChar/2;
其中
cxCaps
(静态变量)保存大写字母的平均宽度我的问题是什么是
& 1 ? 3 : 2
?我知道它是条件运算符,但什么是123。
有人能解释一下这一行吗?
最佳答案
这是一系列的行动。把它放在括号里:
((tm.tmPitchAndFamily & 1) ? 3 : 2) * (cxChar / 2);
因此,首先执行
tm.tmPitchAndFamily & 1
操作,检查tm.tmPitchAndFamily
是否为奇数(如果设置了最小有效位,则为奇数)。此操作的结果是ternary expression ?:
的一部分。如果三元表达式的左侧为非零(即true),则选择:
的左侧,否则选择右侧。然后将其结果(即3
或2
)用于乘法运算。