如何将 add/sub int 转为 BYTE 类型?

How to add/sub int to a BYTE type?

我有一个这样定义的结构:

struct IMidiMsg {
    int mOffset;
    BYTE mStatus, mData1, mData2;
}

并且我将 mData2 int 值设置为 0 到 127 之间,没有任何问题。但是,如果我 add/sub int:

pNoteOff->mData2 -= 150;
pNoteOff->mData2 += 150;

我得到了奇怪的结果。我认为由于类型不同:它是 BYTE,当然不是 int。 (注:BYTE来自minwindef.h

假设我有一个值为 114 的 mData2:您如何先减去 150,然后加上 150,再得到 114?

BYTE 中不能有负值,因为它被定义为 typedef unsigned char BYTE; - 它只能包含 0 到 255 之间的数字。

如果你也想有负值,使用signed char;在 -127 和 +128 之间工作。或者只使用普通的 int。现在节省字节不是一个好主意,对于 32 位或 64 位架构,它会使计算速度变慢。

how would you first sub 150 and than add 150, getting again 114?

这正是应该发生的事情。您从 114 开始,然后从上限为 255 的类型中减去 150。由于 114 小于 150,减法结果为 "borrow",即 (256+114)-150=220。

220 加上 150,得到 370。现在去掉 "carry",得到 370-256=114。

这里使用的机制与任何其他上限的模运算相同。例如,如果您考虑一位十进制数,则执行类似

3-6+6=3

3-6 --> (borrow) 13-6 --> 7
7+6 --> 13 --> 3 (drop tens)