تبدیل اعداد منفی به باینری

تبدیل اعداد منفی به باینری راحت نیست و کمی گیج کننده است. برای درک تبدیل اعداد منفی به باینری اجازه دهید که یک مثال بزنیم. در این مثال می خواهیم عدد 5- را به معادل باینری آن تبدیل کنیم.
در مرحله اول ابتدا عدد 5- را به 5+ و سپس این عدد مثبت را به معادل باینری آن تبدیل می کنیم :

5 = 00000101

مقدار 5+ برابر 101 در سیستم دودویی است پس بقیه بیت های سمت چپ با عدد صفر پر شده اند. بعد از این تبدیل با استفاده از عملگر بیتی NOT( ~ ) بیت ها را برعکس می کنیم :

~5 = 11111010

بعد از انجام این کار مقدار باینری 5~ را با عدد 1 به صورت زیر جمع می کنیم :

   11111010
+  00000001
-----------
   11111011

نتیجه این جمع عدد 5- است. در نگاه اول ممکن است این سوال برایتان پیش بیاید که واقعا حاصل جمع بالا عدد 5- است؟ همانطور که گفتیم این تبدیل کمی گیج کننده است. اگر نتیجه بالا را با استفاده از تکنیک هایی که یاد گرفته اید به معادل دسیمال آن تبدیل کنید رقم 251 را به دست می آورید. اما سی شارپ و دات نت از اولین بیت سمت چپ برای تشخیص مثبت یا منفی بودن عدد استفاده می کند. اگر این بیت 1 باشد عدد منفی و اگر صفر باشد عدد مثبت است. پس باید به صورت زیر عمل جمع را انجم دهید :
negative-to-binary

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر و اگر سوالی دارید در بخش پرسش و پاسخ مطرح بفرمایید.

  1. امید پاسخ دادن

    توضیحات بسیار شفاف و واضح بودند.
    تشکر.

  2. امير پاسخ دادن

    ممنون از توضیحات عالی و واضح شما

  3. پرهام پاسخ دادن

    ممنون. واقعا به درد خورد. من چون سیستمهای embedded رو شروع به خوندن کردم گاهی احتیاج به توضیح دارم‌. مرسی

    • یونس ابراهیمی پاسخ دادن

      خواهش می کنم

  4. مهدی پاسخ دادن

    مرسی خوب بود مخصوصا اون عکس پایین که همه چیزو میگه
    در کل این جور چیزا کجا به کار آدم میاد
    اصلا کاربردش واسه چه برنامه نویساییه؟

  5. مهدی پاسخ دادن

    مرسی
    اینا رو تا حدودی میدونم من خودم چند وقته برنامه نویسی میکنم این عملگرها رو هم میشناسم ولی هیچ وقت نشد من مثلا بگن اقا برو فلان برنامه رو بنویس این عمگرا هم توش کاربرد دارن
    مثلا ادم میره برنامه نویسی شی گرا یاد میگیره خوب همه جا به کار میاد و …
    ولی اینا به نظرم بیشتر واسه اینکه بیشتر بدونی خوبه نه اینکه بخوای باهاشون کار کنی

    • یونس ابراهیمی پاسخ دادن

      دقیقا همینطوره که می فرمایید

  6. یگانه پاسخ دادن

    توضیحات کامل، مفهوم و عالی بودن.
    واقعا متشکرم.

    • یونس ابراهیمی پاسخ دادن

      خیلی لطف دارین

  7. ایرانی پاسخ دادن

    با سلام
    من تازه برنامه نویسی رو شروع کردم
    اون دوستامون بالا نوشته که این چیزها بعدا استفاده ای نداره در برنامه نویسی حرفه ای
    لطفا نفرمایید که اینها رو باید حتما حتما یاد بگیریم یا واقعا لازم نیست
    عملگر های بیتی رو یاد بگیریم
    چون واقعا سخته جساب کنی که چه جوری میشه پنج میشه منفی پنج
    لطفا راهنمایی بفرمائید .

    • یونس ابراهیمی پاسخ دادن

      سلام دوست عزیز
      لازم نیست این نوع تبدیل ها رو بلد باشین، چون تو برنامه نویسی شاید یک بار هم به کارتون نیاد

  8. محمد پاسخ دادن

    عاااالی
    دستتون درد نکنه

  9. فرشید پاسخ دادن

    توضیحاتتان عالی بود، ولی آیا از نظر ریاضی هم از همین عملیات استفاده می شود یا فقط در برنامه نویسی کاربرد دارد؟ اگر جواب منفی است راه حلی برای این کار در ریاضیات وجود دارد؟

    • یونس ابراهیمی پاسخ دادن

      مرسی…
      به طور کلی سه روش برای نمایش اعداد منفی در مبنای 2 وجود دارد. این روش ها عبارتند از نمایش sign – magnitude، مکمل 1 و مکمل 2

      نمایش sign-magnitude: در این نمایش برای منفی کردن یک عدد تنها بیت علامت یک می شود. مثلا با فرض داشتن 4 بیت برای نمایش عدد 0011 عدد 3 است و 1011 عدد 3-

      نمایش مکمل 1: در این نمایش برای منفی کردن عدد بیت های آن را مکمل می کنیم. مثلا با فرض داشتن 4 بیت، 3- برابر 1100 می شود.

      نمایش مکمل 2: برابر مکمل 1 به علاوه 1 است. مثلا 3- در این نمایش برابر با 1100+1=1101 خواهد بود. برای مکمل 2 کردن می توان از روش زیر استفاده کرد:

      عدد مثبت را در نظر بگیر.
      از سمت راست بیت ها را بررسی کن. تا زمانی که به بیت برابر یک نرسیده ای کاری انجام نده.
      برای اولین یک هم کاری انجام نده و جلو برو.
      بقیه بیت ها را مکمل کن.

      مثال: با فرض داشتن 6 بیت برای نمایش عدد مطلوبست نمایش مکمل 2 برای عدد 12-

      (12)10 	= (001100)2
      -12=110100

      مثال: با فرض استفاده از نمایش 8 بیتی مطلوبست نمایش 19- به روش های سه گانه نمایش عدد منفی

      (19)10 	= (00010011)2