0

我在 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 表示校验和)。

4

1 回答 1

0

虽然这两种类型都是无符号的,但它只能使用 | 不是 + 。

于 2016-06-27T08:40:32.590 回答