PDA

View Full Version : سوال: ضرب دو عدد UInt64



maria anders
سه شنبه 11 بهمن 1390, 09:15 صبح
من دو تا عدد دارم که این دو عدد از xor با دو تا عدد دیگه بدست آمده است .
a=u1 xor r1
b=u2 xor r2
هر دو متغیر من از نوع UINT64 می باشد , حالا من a=a*b می کنم .
عدد من بزرگتر از سقف متغیر می شه و من overflow دارم میخوام به اندازه max ؛ UINT نگهدارم و بقیه عدد را بیرون بریزم ...
چطور اینکار انچام بدم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟:عصبان ++:
thanks.

Hybrid
سه شنبه 11 بهمن 1390, 09:33 صبح
سلام دوست عزیز این دستور بزرگترین مقدار uint64 رو نشون میده.


MessageBox.Show(UInt64.MaxValue.ToString());

موفق باشید./

maria anders
سه شنبه 11 بهمن 1390, 10:27 صبح
سلام دوست عزیز این دستور بزرگترین مقدار uint64 رو نشون میده.


MessageBox.Show(UInt64.MaxValue.ToString());

موفق باشید./


ممنون از پاسختون , ولی من اینو می دونم ..چطور می تونم مشکل این overflow رو حل کنم ؟ چطور می تونم اون قسمتی که مجاز است را بردارم و بقیه را دور بریزم ...

ji ming u
سه شنبه 11 بهمن 1390, 10:43 صبح
از متغییرdecimal استفاده کن

صابر
سه شنبه 11 بهمن 1390, 10:57 صبح
من دو تا عدد دارم که این دو عدد از xor با دو تا عدد دیگه بدست آمده است .
a=u1 xor r1
b=u2 xor r2
هر دو متغیر من از نوع UINT64 می باشد , حالا من a=a*b می کنم .
عدد من بزرگتر از سقف متغیر می شه و من overflow دارم میخوام به اندازه max ؛ UINT نگهدارم و بقیه عدد را بیرون بریزم ...
چطور اینکار انچام بدم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟:عصبان ++:
thanks.
عملیات ضرب رو توی یک try catch بذارین، اگه OverFlowException داد، مقدار a رو برابر با UInt64.MaxValue در نظر بگیرید.
در ضمن این کد در یک بلوک checked هم باید باشه تا نتیجه خراب نشه.


checked
{
try
{
a = a * b;
}
catch (OverflowException) {
a=UInt64.MaxValue;
}
}

maria anders
چهارشنبه 12 بهمن 1390, 12:08 عصر
من نمیخوام که اگه عدد من بزرگتر از UINT64 شد , maxاین عدد را قرار بده , می خوام که اون مقداری که محازه (به اندازه UIN64 ) هست را نگهداره و Over Flow بقیه را بیرون بریزه .......برام خیلی مهم .....


نمی دونم که منظورم متوجه می شید یا نه ....؟؟؟






عملیات ضرب رو توی یک try catch بذارین، اگه OverFlowException داد، مقدار a رو برابر با UInt64.MaxValue در نظر بگیرید.
در ضمن این کد در یک بلوک checked هم باید باشه تا نتیجه خراب نشه.


checked
{
try
{
a = a * b;
}
catch (OverflowException) {
a=UInt64.MaxValue;
}
:




}

صابر
چهارشنبه 12 بهمن 1390, 13:03 عصر
پس در این صورت checked رو به unchecked تبدیل کنید. در نهایت در متغیر a اون مقداری خواهد بود که شما دنبالش هستین.

maria anders
چهارشنبه 12 بهمن 1390, 13:22 عصر
واقعا با این کار , من اون جوابی را که می خوام بدست می آورم ؟؟؟؟




پس در این صورت checked رو به unchecked تبدیل کنید. در نهایت در متغیر a اون مقداری خواهد بود که شما دنبالش هستین.

صابر
چهارشنبه 12 بهمن 1390, 13:26 عصر
امتحان کنید!
مثلاً در این برنامه:


UInt64 a = 10;
UInt64 b = UInt64.MaxValue ;
unchecked { a = a + b; }

در متغیر a مقدار ۹ قرار می‌گیرد که می‌توانید آن را با ۱ جمع کنید و به عدد مورد نظرتان برسید.