خطأ غريبة C # تجاوز
-
23-08-2019 - |
سؤال
هل يمكن لأي شخص أن يفسح لي سبب الفائض في متغير أ؟ لاحظ أن B أكبر من.
static void Main(string[] args)
{
int i = 2;
long a = 1024 * 1024 * 1024 * i;
long b = 12345678901234567;
System.Console.WriteLine("{0}", a);
System.Console.WriteLine("{0}", b);
System.Console.WriteLine("{0}", long.MaxValue);
}
-2147483648
12345678901234567
9223372036854775807
Press any key to continue . . .
شكرا!
المحلول
RHS هو إتجاه الضرب لأن كل جزء من التعبير هو int. فقط لأنه يتم تعيينه لفترة طويلة لا يعني أنه أداء مع حسابي طويل.
تغييره إلى:
long a = 1024L * 1024 * 1024 * i;
وسوف تعمل. (الفرق هو L في نهاية أول 1024.)
لا تنتمي إلى StackOverflow