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

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

این کد علامت متغیر صحیح رو برمی‌گردونه!

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

یکی این کد و توضیح بده

int v;
int sign = v >> (sizeof(int) * CHAR_BIT - 1);
هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پرسیده شده یکشنبه ۲۵ فروردین ۱۳۹۲ در C++ توسط prodo  

1 پاسخ

0 امتیاز

برای اعداد صحیح منفی بزرگ‌ترین بیت (سمت چپ‌ترین) یک هست و اگه به تعداد کافی بیت‌های یک متغیر شیفت بشه به سمت راست، تنها چیزی که باقی می‌مونه فقط همون بیت علامت هست.

مثلاً اگه عدد int در ماشین ۳۲ بیتی باشه، ۳۱ شیفت به سمت راست باعث می‌شه بیت علامت باقی بمونه و بقیه‌ی بیت‌ها صفر بشه.

تعداد شیفت یکی کمتر از تعداد بیت‌های عدد هست. بنابراین sizeof(int)*CHAR_BIT-1 این مقدار و برای ما می‌سازه. در ادامه >>sizeof(int)*CHAR_BIT-1 تعداد شیفت لازم رو انجام می‌ده و در نهایت همون یک بیت علامت باقی می‌مونه

مثلاً برای عدد 10000110-01010001-10101010-00001011 انجام ۳۱ شیفت به سمت راست 00000000-00000000-00000000-00000001 رو تولید می‌کنه که عدد یک هست.

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