gpt4 book ai didi

c - mask 变量在 CRC 校验和计算中起什么作用?

转载 作者:行者123 更新时间:2023-11-30 20:22:56 26 4
gpt4 key购买 nike

问题是关于here中图14-6的代码.

掩码计算如下:

mask = -(crc & 1)

为什么我们用 1 & crc 然后结果为负?图14-5没有这个mask变量,为什么?

编辑:

既然这一点很清楚,为什么我们还有这一行:

crc = crc ^ byte;

图 14-5 中没有该行。

如果生成多项式长度不是 8 位的倍数,可以使用此程序吗?

最佳答案

它的作用是检查 crc 的最低有效位然后否定它。效果是,如果该位为零,则 mask将为零(即全零),如果该位为 1,则 mask将是-1 (即全部)。这用于与 0xEDB88320 有条件地异或。 .

另一个解决方案使用 if来满足这个条件。

他们在第二个解决方案中使用的第二个技巧是在一次操作中对所有八位进行位检查的异或。在第一个示例中,他们使用 (int)(crc^byte) < 0 (这意味着检查最高有效位或符号位的异或),然后它们将 crc 都移位和byte向左移动一位,并在下一位上执行相同的操作。在第二个示例中,他们一次执行八位异或,然后检查结果的每一位。

要看看会发生什么,请考虑是否将第一个示例更改为:

for(j=0; j<=7; j++) {
crc = crc ^ mask_sign_bit(byte);
if( (int)crc < 0 )
crc = (crc << 1) ^ 0x04C11DB7;
else
crc = crc << 1;
byte = byte << 1;
}

哪里mask_sign_bit屏蔽除符号位(crc ^ byte 的符号)之外的所有位。变得与 crc ^ mask_sign_bit(byte) 相同所以 if 的结果声明变得相同。那么换档时crc向左一步,由 crc = crc ^ mask_sign_bit(byte) 修改的位会迷路。

关于c - mask 变量在 CRC 校验和计算中起什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37922102/

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