我在 CAPL 中执行此操作(与 C 非常相似):
data[i] = (data[i] & (~mstart)) + (z_Checksum_ldu8[i] & mstart);
data[i] has the value 0x20 and z_Checksum_ldu8[i] is 0x0C
mstart is 0x0F
desired result is 0x2C
actual result is 0x0C
而 data[ ] 和 y_Checksum_ldu8[ ] 属于“字节”类型,而 mstart 也是一个字节(用作位掩码)。代码的其余部分并不重要,因为我可以在调试器中看到结果。而我看到的并不是我想要的!
首先,我为什么要这样做?
- 我想将 lsb-nibble 设置为校验和变量 lsb-nibble 的值
- 操作结束后 data[i] 的 msb-nibble 应该相同
但它不会,这是我的问题:我的错在哪里,msb-nibble 每次都设置为 0x0?100% 肯定,错误一定在该行,因为我可以在执行这行代码后直接看到调试器值更改为 0x0X(X 表示校验和)。