1

現在RC4復号化を実装していますが、このアルゴリズムは0〜255の数値でのみ動作するため、できるだけ安全なコードを記述しunsigned char、単純intな変数ではなく変数を適切に使用したいと考えています。

さて、これは私に状況に直面しましたが、私は何が起こるかを予言することはできません。

与えられているのは3つの変数i、、:jk

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

式はk = (i + j) % 256適切に設定さkれます49か、またはに切り捨てられますか255i+j

編集:「j」が「k」と綴られているのを修正

4

1 に答える 1

4

2^Nこの標準では、符号なし整数型Nの算術演算が、型の値のビット数であるを法とする算術演算であることが保証されているため、算術演算は正しくなります。

C ++ 11標準のn3376ドラフトのセクション3.9.1(4):

符号なしで宣言された符号なし整数は、2 nを法とする算術の法則に従うものとします。ここnで、は、その特定のサイズの整数の値表現のビット数です。46)

46)これは、結果の符号なし整数型で表現できない結果が、結果の符号なし整数型で表現できる最大値より1大きい数を法として減少するため、符号なし算術がオーバーフローしないことを意味します。

于 2012-10-06T23:05:18.140 に答える