我正在使用某些C ++代码,但我只是一个新手,我不理解此条件语句对正确或错误结果的含义。
这就是我所拥有的:
字体包含与位图字体相关的值
for(j = 0; j < COUNT; j++) {
for(i = 0; i < 8; i++) {
Font[j][i] <<= 1;
if((j != COUNT -1) && (Font[j + 1][i] & 0x80))
Font[j][i] |= 0x01;
}
}
我了解大多数情况,布尔值&&
,然后&
使我困惑于此用法的相关性,然后是孤独的0x80
,我只是不明白与(Font[j + 1][i] & 0x80) 0x80 is 128
小数点有关...
字体是128 x 8 font
,但这是一种关系吗?
有人可以帮我把这些放在一起,以便我了解它如何提供条件吗?
我还需要知道| = 0x01如何影响Font [j] [i]。那是管道的一种形式吗?
答案 0 :(得分:1)
if
语句的通用格式为
if (conditional_expression) ...
conditional_expression
是产生结果的任何表达式。结果零(0
)为假,非零为真。
如果conditional_expression
很简单并且没有任何类型的比较,那么它将隐式地与零进行比较。例如
int my_variable = ...; // Actual value irrelevant for example
if (my_variable) { ... }
上面的if
语句隐式等于
if (my_variable != 0) { ... }
例如,对于复合条件也可以进行这种与零的隐式比较
if (some_condition && my_variable) { ... }
等于
if (some_condition && my_variable != 0) { ... }
现在我们回到您的代码和条件:
if((j != COUNT -1) && (Font[j + 1][i] & 0x80))
通过与零的隐式比较,上面的值等于
if((j != COUNT -1) && (Font[j + 1][i] & 0x80) != 0)
也就是说,&&
支票的右侧是Font[j + 1][i] & 0x80
是否为零。
对于&
运算符本身,它是bitwise AND,本质上可以用来检查是否设置了位。对于您的代码,它检查是否设置了与值0x80
相对应的位(八位)。