سؤال

وأنا نشهد سلوك غريب في برنامج .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; // compile time error : 
//"The operation overflows at compile time in checked mode"
// If i do this at runtime, I get some negative values, so the overflow indeed happens.

لماذا يتصرف بلدي Int64 كما لو كانوا في Int32، على الرغم من Int64.MaxValue يبدو لتأكيد أنهم يستخدمون 64 بت؟

إذا كان ذا صلة، أنا باستخدام نظام التشغيل 32 بت، ويتم تعيين الأساسي الهدف إلى "أي وحدة المعالجة المركزية"

هل كانت مفيدة؟

المحلول

وRHS الخاص بك هو فقط باستخدام قيم Int32، بحيث يتم تنفيذ العملية برمتها تستخدم Int32 الحساب، ثم Int32 <م> نتيجة يتم الترويج لفترة طويلة.

وتغييره إلى هذا:

Int64 a = 256*256*256*128L;

ووجميع سيكون جيدا.

نصائح أخرى

استخدم:

Int64 a = 256L*256L*256L*128L;

ولاحقة L تعني Int64 الحرفي، لا لاحقة تعني Int32.

ما كتب بك:

Int64 a = 256*256*256*128

ويعني:

Int64 a = (Int32)256*(Int32)256*(Int32)256*(Int32)128;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top