我在读查尔斯·佩佐尔德的《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),则选择:的左侧,否则选择右侧。然后将其结果(即32)用于乘法运算。

07-26 09:35