اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

استخراج دو عدد صحیح ۳۲ بیتی از عدد صحیح ۶۴ بیتی

0 امتیاز
44 نمایش

فرض کنیم یک عدد صحیح ۶۴ بیتی داریم به اسم l و می‌خوایم ۳۲ بیت اول رو به عنوان یک عدد صحیح ۳۲ بیتی f و ۳۲ بیتی دوم را به عنوان یک عدد صحیح ۳۲ بیتی s جدا کنیم.

این کار و چطور انجام بدیم؟

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پرسیده شده پنجشنبه ۲۴ مرداد ۱۳۹۲ در C++ توسط prodo  

1 پاسخ

0 امتیاز

استفاده از عملیات ساده‌ی ریاضی ممکنه

f = l % 4294967297;
s = l / 4294967297;

همین کار با استفاده از شیفت هم می‌شه

f = (l<<32)>>32;
s = l>>32;

یک راه این هست

f = *(int*)(&l);
s = *(((int*)(&l))+1)

یک راه دیگه استفاده از union هست که به صورت زیر در استاندارد C++ درست نیست اما بیشتر کامپایلرها پشتیبانی می‌کنن

union {
  int x[2];
  long y;
} u;
u.y = l;
f = u.x[0];
s = u.x[1];
هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده پنجشنبه ۲۴ مرداد ۱۳۹۲ توسط prodo