我有以下c ++代码段。我对c ++代码有基本的了解。请在必要时更正我对以下代码的解释:
for (p = q->prnmsk, s = savedx->msk, j = sizeof(q->prnmsk);
j && !(*p & *s); j--, p++, s++);
它包含什么:q是char * q(如声明的那样)是根据代码的结构MSK的类型。 q-> prnmsk包含字节数据,其中prnmask包含15个字节。
与s相似。
因此在for循环中,当j减小时,它将遍历每个字节并执行此!(*p & *s)
操作以继续循环,并且最终如果不满足条件,则循环将退出,否则j将运行直到j == 0。
我说错了吗? * p和* s是什么意思?它是否包含字节值?
答案 0 :(得分:3)
有些人(像我一样)可能会认为以下内容更具可读性
int j;
for (j = 0; j < sizeof(q->prnmsk); ++j)
{
if ((q->prnmsk[j] & savedx->msk[j]) != 0) break;
}
这意味着迭代q-> prnmsk和savedx-> msk,以找到第一次出现位和为零的情况。如果j等于sizeof(q-> prnmsk),则所有位和为零。
答案 1 :(得分:1)
是的,你是对的。 !(*p & *s)
表示他们想要检查q->prnmsk
和savedx->msk
是否同时将相应位设置为1
。