我目前正在实施RC4解密,因为此算法仅对0-255之间的数字进行操作,我想尽可能编写安全代码并正确使用unsigned char
变量而不是普通int
变量。
嗯,这虽然我遇到了一种情况但我无法预防会发生什么。
鉴于3个变量i
,j
,k
:
unsigned char i = 150;
unsigned char j = 155;
unsigned char k = 0;
表达式k = (i + j) % 256
是否会k
正确设置为49
或255
i+j
被截断?
编辑:修正拼写为“k”的“j”
答案 0 :(得分:4)
该标准保证无符号整数类型的算术为算术模2^N
,其中N
是类型中的值位数,因此算术将是正确的。
C ++ 11标准的n3376草案第3.9.1(4)节:
无符号整数,声明为无符号整数,应遵守算术模2 n 的定律,其中
n
是该特定整数大小的值表示中的位数。 46)46)这意味着无符号算术不会溢出,因为无法用结果无符号整数类型表示的结果是以比可以表示的最大值大1的数量为模的方式减少的。由结果无符号整数类型。