المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی تابستان:دوره ی ۱۸:برنامه نویسی:سوال ۸

عملیّات شوم

‎ برنامه‌ی زیر را در نظر بگیرید.

آیا این برنامه به‌درستی کامپایل می‌شود؟ در صورت منفی بودن جواب، خطای کامپایل آن را رفع کنید.

#include <cstdio>
void show(x) { printf("%d\n", x); }
int main() {
  /* place any of below codes here */
  return 0;
}

برای هر یک از تکّه کدهای زیر، در صورتی که آن را در قسمت مشخص شده در ‎main‎ برنامه‌ی بالا قرار دهیم، خروجی یا خطا را بنویسید.

کد الف‎.‎ توجه کنید که اولویت $>>$ و $<<$‎ برابر است. عیناً مانند $+$ و $-$‎.

  int a = 0x5C;
  show(a >> 4 << 4);

‎کد ب‎.‎ توجه کنید که اولویت ‎$\sim$‎ بیش‌تر از ‎/‎ است.

  int b = ~unsigned(0) / 2;
  show(b);

کد ج‎. در C‎ چگونه می‌شد باینری نوشت؟‎!‎

  int c = 01010 / 10;
  show(c);

کد د‎.‎ اولویت عملگرهای ‎unary بالاتر از عملگرهای ‎binary است.

  unsigned char d = !55 ^ ~55;
  show(d);

کد ه‎‍.‎ خیلی هم پیچیده نیست‎!‎

  unsigned char e = 1;
  for (int i=0; i+1<7; i++)
    e = (e << 1) + ((e >> i) & 1);
  show(e);
  e++;
  unsigned char f = 2 * e - 2;
  show(f);

ابزار صفحه