PDA

View Full Version : سوال: روش مستقيم جمع دو عدد در مبناي 16



mehdi_7070
سه شنبه 17 اردیبهشت 1387, 18:19 عصر
با عرض سلام

دو عدد در مبناي 16 داريم كه ميخواهيم با هم جمع كنيم .

روش جمع مستقيم اون چه جوري هست؟ اگه ميشه راهنمايي كنيد .

يك سوال ديگه در همين زمينه : آيا امكان تبديل مستقيم به مبناي 10 وجود داره؟ يعني خود VB تابع آماده براي اين كار داره ؟

با تشكر

Mbt925
سه شنبه 17 اردیبهشت 1387, 18:26 عصر
جمع دو عدد در مبنای 16 مثل جمع در مبنای 10 یا همون جمع معمولی هست.

فقط وقتی 1 منتقل میشه به ارزش بعدی که جمع دو رقم از 15 بیشتر بشه (نه 10)


امکان تبدیل مستقیم هم هست :



Function HexToDec(ByVal hexStr As String) As Long
HexToDec = CLng("&H" & hexStr)
End Function

mehdi_7070
سه شنبه 17 اردیبهشت 1387, 18:57 عصر
خيلي ممنون از راهنمايي شما ...
اگه براي جمع مستقيم ، بيشتر راهنمايي كنيد ممنون ميشم . فكر كنم بايد قبلش تعداد كاراكترها مساوي بشه . يعني طول دو تا رشته را بگيريم ، بعد مقايسه كنيم هر كدوم كوچكتر بود به اندازه اختلافش قبلش صفر اضافه كنيم . درسته؟

درباره طرز عملكرد اين Function ميشه توضيح بدهيد .

ممنون

Mbt925
چهارشنبه 18 اردیبهشت 1387, 11:25 صبح
درسته.

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

مشکل کجاست؟

mehdi_7070
چهارشنبه 18 اردیبهشت 1387, 23:33 عصر
خوب من طبق راهنمايي هاي شما چيزي كه به ذهنم رسيد را پياده كردم . ولي هنوز ايراد داره و درس . ميشه يك نگاهي بكنيد . (دو تا TextBox و يك CoomandButton نياز هست)

[

Dim a As Integer, b As Integer, s As Integer, z As Integer
Private Sub Command1_Click()
x = Len(Text1)
y = Len(Text2)
If x > y Then
While x > y
Text2 = "0" + Text2
y = y + 1
Wend
Else
While y > x
Text1 = "0" + Text1
x = x + 1
Wend
End If
For i = x To 1 Step -1
a = hex(Mid(Text1, i, 1))
b = hex(Mid(Text2, i, 1))
s = a + b
If s > 15 Then
z = s - 15
If z > 9 Then
z = unhex(z)
Else
Print z
End If
s = 1
Else
If s > 9 Then
s = unhex(s)
Else
Print s
s = 0
End If
End If
Next i
End Sub
Private Sub Form_Load()
s = 0
End Sub
Public Function hex(r As String) As Integer
Select Case r
Case "A"
hex = 10
Case "B"
hex = 11
Case "C"
hex = 12
Case "D"
hex = 13
Case "E"
hex = 14
Case "F"
hex = 15
Case Else
hex = r
End Select
End Function
Public Function unhex(u As Integer) As String
Select Case u
Case Is = 10
hex = "A"
Case Is = 11
hex = "B"
Case Is = 12
hex = "C"
Case Is = 13
hex = "D"
Case Is = 14
hex = "E"
Case Is = 15
hex = "F"
End Select
End Function
]

سوالي هم كه توي پست قبلي مطرح كردم درباره اين قسمت بود :

[

HexToDec = CLng("&H" & hexStr)
]
ميخواستم درباره CLng("&H" & string) بيشتر بدونم ( كاربرد خود CLng را مي دونم ) . اون "H&" چي كار مي كنه ؟

mehdi_7070
جمعه 20 اردیبهشت 1387, 21:28 عصر
اگر قسمت دوم سوال بنده هم پاسخ بدهيد ممنون ميشم .

Mbt925
شنبه 21 اردیبهشت 1387, 11:46 صبح
فرض کنید شما یه عدد در مبنای 16 دارید که می خواید به معادل ده دهیش تبدیل بشه.

برای اینکه به وی بی حالی کنیم که عدد مورد نظر که می خوایم به ده دهی تبدیلش کنیم در مبنای 16 اه، باید
"H&" رو به ابتداش اضافه کنیم.
H مخفف Hex برای نشون دادنه اینکه که عدد بعد از این حرف مبنای 16 اه.



&HF
یعنی F یه عدد مبنای 16 اه که معدل ده دهیش میشه 15.

AmirAmiri
شنبه 21 اردیبهشت 1387, 12:24 عصر
سلام. Mbt925 (http://barnamenevis.org/forum/member.php?u=34702) عزیز یه سوال برای پیش اومده. میشه عددها رو با هم در مبنای شانزده AND کنیم؟


X = &H11 AND &H12

این کار جواب میده؟

mehdi_7070
شنبه 21 اردیبهشت 1387, 18:23 عصر
فرض کنید شما یه عدد در مبنای 16 دارید که می خواید به معادل ده دهیش تبدیل بشه.

برای اینکه به وی بی حالی کنیم که عدد مورد نظر که می خوایم به ده دهی تبدیلش کنیم در مبنای 16 اه، باید
"H&" رو به ابتداش اضافه کنیم.
H مخفف Hex برای نشون دادنه اینکه که عدد بعد از این حرف مبنای 16 اه.



&HF
یعنی F یه عدد مبنای 16 اه که معدل ده دهیش میشه 15.



خيلي ممنون ...
موارد ديگه اي هم مثل اين داريم يا فقط براي تبديل Hex كاربرد داره؟

Mbt925
یک شنبه 22 اردیبهشت 1387, 17:01 عصر
سلام. Mbt925 (http://barnamenevis.org/forum/member.php?u=34702) عزیز یه سوال برای پیش اومده. میشه عددها رو با هم در مبنای شانزده AND کنیم؟


X = &H11 AND &H12
این کار جواب میده؟

بله دوست عزیز.
از همه ی عملگرهای بیتی می تونید استفاده کنید . مثل AND , OR , NOT



خيلي ممنون ...
موارد ديگه اي هم مثل اين داريم يا فقط براي تبديل Hex كاربرد داره؟

OCT هم برای اعداد اکتال استفاده میشه.