我在.NET程序目睹一個奇怪的現象: Console.WriteLine(Int64.MaxValue.ToString());
// displays 9223372036854775807, which is 2^63-1, as expected
Int64 a = 256*256*256*127; // ok
Int64 a = 256*256*256*128; // compi
鑑於這種代碼: int x = 20000;
int y = 20000;
int z = 40000;
// Why is it printing WTF? Isn't 40,000 > 32,767?
if ((x + y) == z) Console.WriteLine("WTF?");
,知道int可以支持-32,768到+32,767。爲什麼這不會導致溢出?
我有兩個有符號整數,我想減去它們。我需要知道它是否溢出。 int one;
int two;
int result = two-one;
if (OVERFLOW) {
printf("overflow");
} else {
printf("no overflow");
}
就是這樣的。有沒有一個好的方法來做到這一點?
我在與℃的奇異問題++,它應該之前長數據類型溢出長。我所做的(迄今爲止取得成功)是讓整數的行爲像浮點數一樣,因此範圍[-32767,32767]映射到[-1.0,1.0]。它在哪裏跌倒,使用較大的參數代表浮大於1.0: inline long times(long a, long b) {
printf("a=%ld b=%ld ",a,b);
a *= b;
pri