چهارشنبه, 19 ارديبهشت 1403

 



موضوع: مبناها

مبناها 9 سال 11 ماه ago #79315

از اونجایی که زبان ماشین 0و1 هست هر عددی که به ما میدن باید به این دوعدد تبدیل بشه.
مبنای اعداد:2-8-10-16
که معمولاً اعداد رو در مبنای 10 به کار میبریم.مثل 12؛45,67895
حالا میخوایم یک عدد مبنای 10 رو به مبنای 2 تبدیل کنیم
1-تقسیمهای متوالی که همتون بلدین دیگه؟؟؟

35=(100011) ‌‌‌‹در مبنای دو›

2-این راه خیلی آسونتره و اگه یک عدد بزرگ دادن خیلی زودتر میشه به جواب رسید(عدد مورد نظر را به توانهای 2 عدد تجزیه میکنیم تا عدد مورد نظر یا استفاده از توانهای 2 ساخته شود.به جای عددهایی که داریم 1 میگذاریم)
35=32(5^2)+3
0^2 1^2 2^2 3^2 4^2 5^2
1 1 0 0 0 1 = 35

حالا این سوال پیش میاد که اعداد منفی رو چه جوری باید به مبنای 2 برد؟؟؟
ابتدا توضیح مختصری درباره ی Bit وByte بدم.


به هر کدام از این مربع ها یک بیت گفته میشود با 0 و 1 پر میشود.پس 8^2=256 حالت برای پر شدن این مربع ها وجود دارد.
8bit=1byte 16bit=1Word
32bit=1Dw 64bit=Qw

پس باتوجه به این جدول بازه بایت(برای اعداد مثبت)‍[0,255]=
برای اعداد منفی این مقادیر قرینه نمیشود بلکه با استفاده از قانون مکمل2 اعداد رو منفی میکنیم.


نکته:با عوض کردن بیت علامت عدد منفی نمیشود
Byte= [-128,127]
مکمل1 = جای 1و0 عوض میشود (0به جای1 و برعکس)
مکمل2 = از سمت راست به اولین یک رسیدیم بدون تغییر مینویسیم ولی بقیه 0و1 ها عوض میشود.
برای اینکه بیشتر متوجه بشید یک مثال میزنم
عدد 10- را به مبنای 2 ببرید؟
حل:ابتدا عدد 10 را به مبنای دو میبریم (00001010)= 10
توجه کنید که این مسئله در 8بیت حل میشود و باید صفرهای پشت عدد حتماً نوشته شود
طبق قانون مکمل2 از سمت راست عددها را میخونیم.0 و1 (به یک رسید اعداد عوض میشود)1و0و1و1و1و1.
(11110110)=10- در مبنای دو

10000000 در مبنای دو برابر چه عدد یا عددهایی است؟

عدد 10000000=128- یا 128+ است.این عدد تنها عددی است که اگر بیت علامت عوض شود عدد قرینه میشود.
ادامه درس:
در ادامه مبحث مبناها به بررسی مبنای 8 و 16 میپردازیم.
مبنای 8:
اعداد 0و1و...و7 را قبول میکند.
111=2^8*1+1^8*5+0^8*7=157(در مبنای 8)

تبدیل مبنای 10 یه 8:
روش تقسیمهای متوالی


مبنای 16:
اعداد 0و1و2و...و9وF=15,14=E,13=D,12=C,11=B,10=A
3A(در مبنای 16)=1^16*3+0^16*10=58

تبدیل مبنای 10 به 16:
استفاده از تقسیمهای متوالی.فکر نکنم دیگه لازم باشه توضیح بدم.

برای اینکه مبنای اعداد را نشان بدهند؛راه دیگری هم وجود داره.یعنی به جای اینکه مبنا رو در زیر پرانتز در کنیر اعداد بنویسند.میتوانیم از حروف استفاده کنیم:
B: مبنای2
O: مبنای 8
D: مبنای 10
H: مبنای 16

تا اینجا هر تبدیلی که خونده بودیم برای مبنای 10 بود حالا تبدیل اعداد به مبنای 2 رو میگم که کاربرد بیشتری داره
تبدیل از مبنای 8 به 2 و برعکس:
برای تبدیل اعداد از مبنای 8 به مبنای 2 در هررقم مبنای8 معادل سه رقم در مبنای2 میشود.
52O=5(101),2(010( پس 52O=101010
از مبنای 2 به 8:
از سمت راست رقمها را سه تا سه تا جدا میکنیم.هر سه رقم درمبنای2 معادل یک رقم در مبنای8 است.
011 011 101=
335
تبدیل از مبنای 16 به2 و برعکس:
مانند مبنای8 است فقط ارقام به چهار دسته تقسیم میشود.

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

جمع:
مثل جمع کردن معمولی هست وزیاد فرق نمیکنه.
0+0=0 1+0=1 1+1=10 0+1=1
مثال:23o+110111b=?h
حل:23 در مبنای 8=010011
010011+110111=1001010=4ah

تفریق:
0-1=1 0-0=0 1-1=0 1-0=2(تو تفریق معمولی وقتی یه عدد کوچکتر رو میخواستیم از یه عدد بزرگتر کم کنیم از عدد بعدیش غرض میگرفتیم.در اینجا هم به همین صورت عمل میکنیم.با این تفاوت که مبنای عدد باید توجه کنیم.مثلاً اگر در مبنای 2 باشه در موقع غرض گرفتن 2واحد به عدد اضاقه میکنیم واگر مبنای 16 باشد 16 واحد)
مثال:202h-76d=?b
حل:
202h=1000000010 , 76d=000011110
مدير دسترسي عمومي براي نوشتن را غيرفعال كرده.
مدیران انجمن: بهاره عظیمی جوزانی