سؤال

هل يمكن لأي شخص أن يفسح لي سبب الفائض في متغير أ؟ لاحظ أن 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.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top