使用unsigned char算术

时间:2012-10-06 23:01:36

标签: c++ math types

我目前正在实施RC4解密,因为此算法仅对0-255之间的数字进行操作,我想尽可能编写安全代码并正确使用unsigned char变量而不是普通int变量。

嗯,这虽然我遇到了一种情况但我无法预防会发生什么。

鉴于3个变量ijk

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

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

编辑:修正拼写为“k”的“j”

1 个答案:

答案 0 :(得分:4)

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

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

  

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

     

46)这意味着无符号算术不会溢出,因为无法用结果无符号整数类型表示的结果是以比可以表示的最大值大1的数量为模的方式减少的。由结果无符号整数类型。

相关问题