Defijne C ++中语句的含义

时间:2019-01-17 12:28:19

标签: c++

我正在使用某些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]。那是管道的一种形式吗?

1 个答案:

答案 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相对应的位(八位)。