gpt4 book ai didi

c - 这段 C 代码对 unsigned char 的操作做了什么?

转载 作者:太空宇宙 更新时间:2023-11-04 05:14:17 25 4
gpt4 key购买 nike

我正在维护一个遗留的 C 代码,其中包含对我来说未知的逻辑。很明显跟unsigned char的按位运算有关系。但是我不熟悉按位运算,谁能解释一下这背后的机制?我包括了一些关键陈述。

    private const unsigned char DONE_HDR = 0x01;
private const unsigned char DONE_TRL = 0x02;
private const unsigned char DONE_ACC = 0x04;
private const unsigned char DONE_NTW = 0x08;
unsigned char done = 0;

它分配给变量的是什么? 16位数字?

case TAP_HDR:
if (done & DONE_HDR){
//do something
}
done |= DONE_HDR;
break;
case TAP_TRL:
if (done & DONE_TRL){
//do something
}
done |= DONE_TRL;
break;
case TAP_ACC:
if (done & DONE_ACC){
//do something
}
done |= DONE_ACC;
break;
case TAP_NTW:
if (done & DONE_NTW){
//do something
}
done |= DONE_NTW;
break;

如何评估 unsigned char?我以为我们只能评估 bool 值或数字。如果数字是正数,它将被评估为真。但是 unsigned char 没有负值所以我在这里感到困惑。什么时候会是真的? “&”操作的目的/结果是什么?

如果在那之后,无论上面的 if 语句是否为真,它都会:

done |= DONE_HDR;

好像在记录状态。我想无论结果如何,都必须取决于“完成”的值,因为 DONE_HDR 是一个常数。

最后检查:

if (!(done & DONE_HDR))
if (!(done & DONE_TRL))
if (!(done & DONE_ACC))
if (!(done & DONE_NTW))

可以检查是否遇到了所有的记录。再一次,我不知道 & 在这里发挥什么作用。

最佳答案

  1. & 是按位与运算符。所以像这样的表达:

    (done & MASK)

    正在检查是否在 done 中设置了 MASK 位。这意味着:

    !(done & MASK)

    正在检查 MASK 是否已清除。赋值运算符行:

    done |= MASK;

    正在done中设置MASK位。

  2. charsigned charunsigned char 是整数类型,与任何其他整数类型非常相似 - 它们只是通常较小。它们通常是 8 位类型,但您可以检查 stdint.h 中的 CHAR_BIT 宏来确定。

关于c - 这段 C 代码对 unsigned char 的操作做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12292918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com