对于三个n位有符号整数a
、b
和c
(例如32位),考虑到整数溢出,a * (b + c) == (a * b) + (a * c)
总是正确的吗?
我认为这是独立于语言的,但如果不是,我特别感兴趣的是Java的答案。
发布于 2013-01-07 11:19:47
是的,它是成立的,因为整数运算是有限环上的模运算。
你可以在这里看到一些理论讨论:https://math.stackexchange.com/questions/27336/associativity-commutativity-and-distributivity-of-modulo-arithmetic
发布于 2013-01-07 11:20:29
分配特性适用于模运算;由于固定位长2的补码整数运算对于相同(无符号)位长度的模运算是homomorphic的,所以当使用2的补码运算时,分配特性保持不变。
更详细的解释可以在here上找到。
发布于 2013-01-07 11:19:25
是的,它确实适用于Java,包括在溢出的情况下。(某些其他语言没有指定溢出行为,在这种情况下不做任何保证。)
https://stackoverflow.com/questions/14189299
复制相似问题