-2

在考虑上溢和下溢的同时,在 C++ 中递增/递减字节的最佳方法是什么?例如,我有:

char c = random byte;
c += 0xB;

如果 c <= 0xF4,这将很好地工作,但任何高于此的值都会导致溢出。同样,如果它是 c -= 0xB; 并且 c < 0xB,将发生下溢。

假设c = 0xFF,相加后会是0xA吗?同样下溢,如果 c = 0,结果会是 0xF5 吗?

此外,由于一些奇怪的原因,当我增加特定数字时,会出现奇怪的结果。例如,如果我将 0x0 增加 0xA,则使用以下代码:

c = (c + 0xA) & 0xFF;

结果是:0x0D 0x0A 而不仅仅是 0x0A... 如下图所示: 增量问题

而所有其余的字节都正确增加。

4

1 回答 1

1

我至少可以用以下方式解释您的结果0x0 by 0xA:在 Windows 上,文本文件中的换行符通常表示为\r\n而不是\n,文件 I/O 函数将有助于为您进行翻译。在这种情况下,您不希望进行转换,因此您可以以二进制模式打开文件,这将禁止自动转换。

至于处理溢出,如果您能够使用unsigned char而不是char,则可以保证对溢出和下溢具有明确定义的模运算。

如果您需要处理已签名的过度/不足流,则必须仔细编写所需的所有逻辑。

于 2015-02-09T17:28:40.733 回答