的问题是,文字“99”被视为一个int。如果您添加“L”,它会将其视为长时间。为了解决您的编译问题:
long test2 = 99L * 99L * 99L * 99L * 99L;
并修复“不正确的结果”所造成整数溢出:
long r = 99;
long test1 = r * r * r * r * r;
关键的一点是,体现出了“=”进行评估的权之前完成long r
的分配。
还有其他文字后缀你可能感兴趣的:
Type Suffix Example
uint U or u 100U
long L or l 100L
ulong UL or ul 100UL
float F or f 123.45F
decimal M or m 123.45M
@ m.edmonson,关于你的,为什么它出来到919965907.这是怎么回事的问题,是该值是“包装”周围int.MaxValue。你可以用一个小测试程序看到:
int i = 99; // 99
i *= 99; // 9801
i *= 99; // 970299
i *= 99; // 96059601
i *= 99; // 919965907 should be 9509900499 but comes out to 919965907
// which is (9509900499 % int.MaxValue)
long k = 9509900499 % int.MaxValue;
什么意思是“环绕”?当您以1超过int.MaxValue
时,值“返回”到int.MinValue
。
int j = int.MaxValue;
j++;
bool isNowMinValue = (j == int.MinValue); // true, the value has "wrapped around"
这有点简单化;如果你搜索“整数溢出”,你会得到一个更好的解释。这是值得理解如何整数(和其他数字类型)与32个比特表示:
http://en.wikipedia.org/wiki/Signed_number_representations
优秀的答案 - 你能解释一下为什么他在长整数乘法之间得到不同的结果? –
你能澄清你的意思吗?那么这与模数%有关? –
我相信你只需要一个'99L',剩下的就会变成upcast。 –