我知道,Int32.MaxValue * Int32.MaxValue会产生一个大于的数字Int32; 但是,这句话不应该提出某种例外吗?
在做IF (X * Y > Z)所有事情的时候,我碰到了这个Int32.X并且Y足够大,你会得到一个虚假的价值X * Y.
为什么这样以及如何解决这个问题?除了把一切都投到了Int64.
Dan*_*ath 26
因为int32将结果限制在32位.
所以,如果你看一下字节级的数学.
FFFFFFFF * FFFFFFFF = FFFFFFFE00000001
Run Code Online (Sandbox Code Playgroud)
如您所见,最低的4个字节= 1.
有趣的是,无论您使用何种基础,这都有效:
(n-1)*(n-1) mod n
n^2 - 2n + 1 mod n
0 - 0 + 1 mod n
1 mod n
Run Code Online (Sandbox Code Playgroud)
你必须要求它:
checked {
int a = int.MaxValue;
int b = int.MaxValue;
int c = a * b; // kaboom
}
Run Code Online (Sandbox Code Playgroud)