これを行うための単純なC関数は次のようになります。
int is_valid (int old_val, int new_val, int offset, int width)
{
if (new_val <= old_val)
/* The only way this can happen is if there was wrap-around.
OR if the `new_val' is invalid. If it is invalid, the next `if'
will catch it. */
new_val += width;
if (new_val > (old_val + offset))
return 0;
return 1;
}
わかりやすく、それが本当に大事なことだと思います。
あなたの場合:offset = 10
そしてwidth = 256
。
警告:
new_val + width
入力は、にold_val + offset
収まるように十分に小さくする必要がありint
ます。
old_val
とnew_val
が同じである場合、入力は無効と見なされます。これが希望どおりでない場合は、に変更<=
して<
ください。
old_val
この関数は、とnew_val
がすでにモジュロ幅、つまりモジュロ256であることを前提としています。これは検証されません。
次の入力で実行すると:
int main (void)
{
printf ("%d\n", is_valid (255, 9, 10, 256)); /* Pass. */
printf ("%d\n", is_valid (255, 10, 10, 256)); /* Fail. */
printf ("%d\n", is_valid (0, 10, 10, 256)); /* Pass. */
printf ("%d\n", is_valid (0, 11, 10, 256)); /* Fail. */
printf ("%d\n", is_valid (100, 109, 10, 256)); /* Pass. */
printf ("%d\n", is_valid (100, 110, 10, 256)); /* Pass. */
printf ("%d\n", is_valid (100, 111, 10, 256)); /* Fail. */
return 0;
}
次の出力が得られます。
1
0
1
0
1
1
0