-
یک سوال ساده از عملگرها
سوال این است که:حاصل عبارت روبه رو چه می شود
25 imp 41 eqv 37
می دانم که eqvاولویت اش بیشتر است می دانم باید به nbcd تبدیل شود تا به جواب برسیم
41=00101001
37=00100101
eqv=11110011=-13
چه طور جواب -13 می شود من هرکار می کنم عددی مثبت بالای 200 می رسم من فقط یک قسمت اش گفتم
-
یعنی هیچ کس نمی دونه
این تست ویژوال چه طور هیچ کس نمی دونه
-
سلام.
فکر کنم کسی متوجه نشد...
متاسفانه منم متوجه نشدم...
اگه میتونین واضح تر بدید و یک یا چند مثال هم بزنید.
موفق باشید.
-
فرض کنید یک عبارت به شما داده اند جواب اش از شما خواسته اند
حالا این عبارت این است
41 eqv 37
جواب شما چه عددی همین
-
سلام
اول باید بدانید که محاسبات بیتی وابسته است به انداره متغیرهای مورد محاسبه.
مثلاً ...
جواب محاسبه فوق از 8 تا 64 بیتی با و بدون علامت در VB9 چنین خواهد بود:
کد:
'VB2008
Const x As Integer = 37
Const y As Integer = 41
Dim i8 As SByte = Not (CSByte(x) Xor CSByte(y))
'Int8=-13
Dim ui8 As Byte = Not (CByte(x) Xor CByte(y))
'UInt8=243
Dim i16 As Short = Not (CShort(x) Xor CShort(y))
'Int16=-13
Dim ui16 As UShort = Not (CUShort(x) Xor CUShort(y))
'UInt16=65523
Dim i32 As Integer = Not (CInt(x) Xor CInt(y))
'Int32=-13
Dim ui32 As UInteger = Not (CUInt(x) Xor CUInt(y))
'UInt32=4294967283
Dim i64 As Long = Not (CLng(x) Xor CLng(y))
'Int64=-13
Dim ui64 As ULong = Not (CULng(x) Xor CULng(y))
'UInt64=18446744073709551603
Stop
شاید به نظر شما این جواب ها مختلف باشند ولی از دید ریاضی مبنای دو این اعداد تغریباً برابر هستند و مشکل شما در عدم درک این تفاوت ناشی از عدم اطلاع از نحوه ذخیره اعداد منفی در رایانه میشود که طبق روشی موسوم به مکمل2 انجام میشود.
روش مکمل دو برای اعداد منفی چنین است که کل بیتهای عدد را معکوس کرده و سپس با 1 واحد کم میشود.
مثلاً اگر محاسبه یک بایتی باشد 13- چنین محاسبه و ذخیره میشود.
(در ج صفرهای اضافی تا انتهای متغییر بسیار لازم است!)
عدد 13 در قالب 8 بیتی
00001011
معکوس میشود
11110100
1- میشود
11110011
این عدد 13- در RAM در شرایط یک بایتی خواهد بود (SByte یا Int8 در VB9)
پس 11110011 در شرایط SByte یا Int8 میشود 13- ولی همین 11110011 اگر داخل یک Byte یا UInt8 باشد معنی 243+ را میدهد !!!!
حالا وقتی متغییر بزرگتر شود (مثلاً 16 بیتی) صفرهای خالی قبل از ان همه یک شده و عدد را بزرگتر میکنند.
عدد 13 در قالب 16 بیتی
0000000000001011
عدد 13- در قالب 16 بیتی
1111111111110011
باز هم 1111111111110011 در قالب علامت دار 16 بیتی (مثل Short یا Int16 در VB9) معنی 13- میدهد ولی همین مقدار در یک قالب 16 بیتی بدون علامت (مثل UShort یا UInt16 در VB9) معنی 65523 میدهد!!!
میبینید که فرق خاصی ندارد و همه جوابها یکی است.
=====
ولی اگر میخواهید بدانید که روش ریاضی مکمل2 برای جبر مبنای 2 از کجا آمده به اینت دقت کنید:
پس 13+ این شد:
00001011
و 13- هم این شد:
11110011
خوب حالا اگر 13+ با 13- جمع شود چه میشود؟
00000000
خوشتان امد! این یعنی دنیای زیبا و جذاب ریاضی.