我有三个N位号,A,B,和C.我不能轻易计算,(A + B) % C但我可以轻松计算A % C和B % C.如果模运算是无符号的,并且我提前知道A + B没有包围N位,那么我可以改为计算((A % C) + (B % C)) % C.但是,是否可以对模数操作签名或添加A并B可能导致环绕的情况执行任何操作.
看起来可能存在一些混淆,为什么((A % C) + (B % C)) % C不能依赖它始终工作.这是一个未签名的示例:
unsigned A = 0x1U;
unsigned B = 0xFFFFFFFFU;
unsigned C = 0x3U;
((A % C) + (B % C)) % C == 0x1U but (A + …Run Code Online (Sandbox Code Playgroud)