1

我目前正在实现 RC4 解密,并且由于该算法仅适用于 0-255 之间的数字,因此我想编写尽可能安全的代码并正确使用unsigned char变量而不是普通变量int

好吧,尽管这让我遇到了一种我无法预测会发生什么的情况。

给出了 3 个 vars i, j, k:

unsigned char i = 150;
unsigned char j = 155;
unsigned char k = 0;

表达式是否会被正确k = (i + j) % 256设置k49或被截断?255i+j

编辑:修复了一个“j”被拼写为“k”

4

1 回答 1

4

该标准保证无符号整数类型的算术是算术模2^N,其中N是类型中值的位数,因此算术将是正确的。

C++11标准的n3376草案第3.9.1(4)节:

声明为无符号的无符号整数应遵守算术模 2 n的定律,其中n是该特定大小的整数的值表示中的位数。46)

46)这意味着无符号算术不会溢出,因为不能由得到的无符号整数类型表示的结果以比得到的无符号整数类型可以表示的最大值大一的数字为模减少。

于 2012-10-06T23:05:18.140 回答