رفتن به محتوا

جلسه هفتم

۱) عملیات بیتی (Bitwise Operations)

تمرین ۱.۱: معکوس کردن بیت‌ها

تابعی به نام revbits بنویسید که بیت‌های یک عدد ۸ بیتی را معکوس کند.

  • ورودی:
    • یک عدد ۸ بیتی (باینری: 01000001)
  • خروجی:
    • عدد با بیت‌های معکوس شده. (باینری: 10000010)

مثال:

input: 01000001
output: 10000010

تمرین ۱.۲: تنظیم بیت nام (Set N-th Bit)

تابعی به نام setbit بنویسید که بیت nام از یک کاراکتر را یک کند.

  • ورودی:
    • یک کاراکتر و موقعیت بیت
  • خروجی:
    • کاراکتر با بیت تنظیم‌شده.

مثال:

input: 'A' ، موقعیت بیت: 5
output: 'Q'

در این مثال، باید بیت ۵ام از کاراکتر ‘A’ (01000001) را به 1 تغییر دهید. با تغییر بیت ۵ام این عدد به ۱ ‘Q’ (01010001) حاصل می‌شود.

تمرین ۱.۳: پاک کردن بیت nام (Clear N-th Bit)

تابعی به نام clearbit بنویسید که بیت nام از یک کاراکتر را صفر کند. هدف این است که یکی از بیت‌های مشخص شده (nام) را در یک کاراکتر (عدد) صفر کنیم. به این معنی که موقعیتی که در آن بیت معین قرار دارد را به 0 تغییر دهیم.

  • ورودی:
    • یک کاراکتر و یک عدد(موقعیت بیت)
  • خروجی:
    • عدد با بیت پاک‌شده.

مثال:

input: 'C' ، 1
output: 'A'

مقدار عددی ‘C’ به باینری تبدیل می‌شود: 01000011. بیت در موقعیت 1 صفر می‌شود، که نتیجه به 01000001 (عدد 65) تبدیل می‌شود.

۲) حلقه‌ها و شیفت بیتی (Loops & Bit Manipulation)

تمرین ۲.۱: نمایش بیت‌های یک عدد

برنامه‌ای بنویسید که بیت‌های یک عدد صحیح ورودی را به صورت باینری نمایش دهد.

  • ورودی:
    • یک عدد صحیح
  • خروجی:
    • بیت‌های عدد به ترتیب از چپ به راست.

مثال:

input: 5
output: 00000101

۳) عملیات شیفت (Shift Operations)

تمرین ۳.۱: شمارش بیت‌های یک (Bit Counting)

تابعی بنویسید که تعداد بیت‌های یک (1) را در یک عدد بشمارد. از شیفت چپ یا راست استفاده کنید.

  • ورودی:
    • یک عدد باینری
  • خروجی:
    • تعداد بیت‌های یک.

مثال:

input: 9
output: 2

۴) سرریز و کاهش (Overflow & Underflow)

تمرین ۴.۱: شبیه‌سازی سرریز و کاهش

برنامه‌ای بنویسید که سرریز و کاهش مقدار در unsigned char و signed char را نشان دهد.

  • ورودی:
    • یک عدد صحیح (برای مثال: 127)
  • خروجی:
    • بعد از افزایش و کاهش مقدار در بازه‌ی signed char و unsigned char.

مثال:

input: 127
output:
127
-128
-127

در این مثال، مقدار اولیه 127 حداکثر مقدار قابل ذخیره در signed char است. وقتی مقدار از 127 بیشتر می‌شود، به -128 می‌رسد که حداقل مقدار ممکن برای signed char است. سپس با کاهش مقدار از -128، به -127 و به همین ترتیب تغییرات ادامه پیدا می‌کند. این به دلیل محدودیت‌های signed char و unsigned char است که در آن سرریز و کاهش رخ می‌دهد.

۵) ترکیب چند موضوع (Combined Topics)

برنامه‌ای بنویسید که:

۵.۱: هر کاراکتر نام شما را به باینری تبدیل کرده و چاپ کند.

  • ورودی:

    • هر کاراکتر نام شما را در یک خط بگیرد. مثلا برای نام Ali کاراکتر ‘A’, ‘l’ , ‘i’ را در سه خط و به ترتیب وارد کنید.
  • خروجی:

    • باینری هر کاراکتر از نام شما

مثال:

input: Ali
output:
A: 01000001
l: 01101100
i: 01101001

۵.۲: بیت ۴ام هر کاراکتر را یک کند و مقدار جدید را چاپ کند.

  • خروجی:
    • تغییر بیت ۴ام هر کاراکتر به 1 و نمایش مقدار جدید.

مثال:

output:
A: 01000001 -> 01010001
l: 01101100 -> 01111100
i: 01101001 -> 01111001

۵.۳: نام شما را ۳ بیت به راست شیفت دهد.

  • خروجی:
    • هر کاراکتر نام شما بعد از شیفت ۳ بیت به راست.

مثال:

A: 01000001 -> 00001000
l: 01101100 -> 00011011
i: 01101001 -> 00011010

۶) توابع (Functions)

تمرین ۶.۱: استخراج دهگان عدد

تابعی بنویسید که عدد x را دریافت کرده و دهگان آن را برگرداند.

  • ورودی:

    • یک عدد صحیح x که از کاربر دریافت می‌شود.
  • خروجی:

    • دهگان عدد به عنوان خروجی باز می‌گردد.

مثال:

input: 345
output: 4

تیم تدریس‌یاران درس - © ۱۴۰۳