Increment/Decrement c++ 中的字节(字符)与 over/under-flow
Increment/Decrement byte (char) in c++ with over/under-flow
在考虑上溢和下溢的情况下,在 C++ 中 increment/decrement 一个字节的最佳方法是什么?例如,我有:
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... 如下图所示:
而其余所有字节都正确增加。
我至少可以用 0x0 by 0xA
来解释你的结果:在 Windows 上,文本文件中的换行符通常表示为 \r\n
而不是 \n
并且文件I/O 函数将有助于为您完成此翻译。在这种情况下,您不希望进行转换,因此您可以以二进制模式打开文件,这将禁止自动转换。
至于溢出处理,如果你能够使用unsigned char
而不是char
,它保证有定义明确的溢出和下溢模算法。
如果您需要处理已签名的 over/under 流,您将不得不仔细编写所需的所有逻辑代码。
在考虑上溢和下溢的情况下,在 C++ 中 increment/decrement 一个字节的最佳方法是什么?例如,我有:
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... 如下图所示:
而其余所有字节都正确增加。
我至少可以用 0x0 by 0xA
来解释你的结果:在 Windows 上,文本文件中的换行符通常表示为 \r\n
而不是 \n
并且文件I/O 函数将有助于为您完成此翻译。在这种情况下,您不希望进行转换,因此您可以以二进制模式打开文件,这将禁止自动转换。
至于溢出处理,如果你能够使用unsigned char
而不是char
,它保证有定义明确的溢出和下溢模算法。
如果您需要处理已签名的 over/under 流,您将不得不仔细编写所需的所有逻辑代码。