سلام
چگونه میشه فهمید مثلا بیت 12 یه متغییر از نوع لونگ چنده صفره یا یک میشه؟
سلام
چگونه میشه فهمید مثلا بیت 12 یه متغییر از نوع لونگ چنده صفره یا یک میشه؟
dim a as long
if a.12=1 then exit do
من تو یه زبون دیگه این کار رو میکردم ولی تو vb نمیدونم چیکار کنم
یعنی کسی نیست جواب من رو بده ؟ تو رو خدا لازمش دارم
ممنون فقط
چطور میشه عوضش کرد؟
مثلا یه بیتشو یک کنم چطوری میشه
آخرین ویرایش به وسیله reza1373 : پنج شنبه 03 اسفند 1391 در 22:17 عصر
دوستان کمککککککککککک
از AND و OR یا XOR استفاده میشه.
برای 0 یا 1 کردن یک بیت :
Private Sub SetBit(ByRef value As Long, ByVal bit As Integer, ByVal bitValue As Boolean)
If bitValue Then
value = value Or (2 ^ bit)
Else
value = value And (Long.MaxValue Xor (2 ^ bit))
End If
End Sub
به عنوان مثال، یک کردن بیت شماره 11 در عدد n
Dim n As Long = 12345
SetBit(n, 11, True)
صفر کردن بیت شماره 11 در عدد n
Dim n As Long = 12345
SetBit(n, 11, False)
مهندس ارور میده
فقط همین تنها بسه؟
SetBit(n, 11, True)
یا اون ساب رو هم میخواد؟
میشه یه ذره دستوراتو توضیح بدید ممنون میشم
میخوام مثلا بگم بیت 12 ام A برابر بیت 12 B بشه باید چطوری بگم
اینجوری درسته؟
SetBit(b, 12, Math.Sign(a And (2 ^ 11)))
اصول مقدماتی محاسبات باینری ئه :
ارزش بیت شماره n در یک عدد باینری برابر است با 2 به توان n
وقتی عددی با عدد دیگری AND می شود، فقط زمانی بیت های متناظر 1 می شوند که هر دو 1 باشند، وگرنه 0 خواهند شد.
از این خاصیت AND برای 0 کردن بیت ها استفاده می شود.
فرضا اگر عدد x را با عدد 11111101 AND کنیم، بیت دوم اش 0 خواهد شد و بقیه بیت ها تغییری نخواهند کرد.
وقتی عددی با عدد دیگری OR می شود، فقط زمانی بیت های متناظر 0 می شوند که هر دو 0 باشند، وگرنه 1 خواهند شد.
از این خاصیت OR برای 1 کردن بیت ها استفاده می شود.
فرضا اگر عدد x را با عدد 00000010 OR کنیم، بیت دوم اش 1 خواهد شد و بقیه بیت ها تغییری نخواهند کرد.
وقتی عددی را با عدد دیگری XOR کنیم، بیت های متناظری که یکسان اند 0 خواهند شد و بیت های متناظری که با هم فرق دارند 1 خواهند شد.
از این خاصیت XOR برای تغییر دادن مقدار بیت ها استفاده می شود.
فرضا اگر عدد x را با عدد 00000010 XOR کنیم، بیت دوم اش تغییر خواهد کرد، اگر 0 بود 1 می شود و اگر 1 بود 0 می شود. بقیه بیت ها تغییری نخواهند کرد.
ما برای 1 کردن بیت شماره n ام، باید آنرا با عددی OR کنیم که بیت n اش 1 است و بقیه 0 اند. این عدد همان 2 به توان n است.
ما برای 0 کردن بیت شماره n ام، باید آنرا با عددی AND کنیم که بیت n اش 0 است و بقیه 1 اند. این عدد را از XOR کردن عددی که همه
بیت هایش 1 است (Long.MaxValue) و عدد 2 به توان n بدست می آوریم.
بیت شماره 12 بیت 13 ام ئه، اگر اون 12 و 11 شما رو به اشتباه می اندازه، برای خوندن مقدار بیت شماره n از GetBit استفاده کنید :
Private Function GetBit(ByRef value As Long, ByVal bit As Integer) As Integer
Return Math.Sign(value And (2 ^ bit))
End Function
بیت 12 ام همیشه بیت شماره 11 است :
SetBit(b, 11, GetBit(a, 11))
به نظرتون مشکل کجایه یه ارور میده به خطی که مشخص کردم
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim bmp As Bitmap
bmp = New Bitmap(PictureBox1.Image)
Dim color As Color, r As Byte, g As Byte, b As Byte, x As Long, y As Long, out As Long
x = 0
y = 1
Do
color = bmp.GetPixel(x, y)
x = x + 1
If x = 240 Then
x = 0
y = y + 1
End If
If y = 320 Then Exit Sub
b = color.B
SetBit(out, 0, Math.Sign(b And (2 ^ 1)))
SetBit(out, 1, Math.Sign(b And (2 ^ 2)))
SetBit(out, 2, Math.Sign(b And (2 ^ 3)))
SetBit(out, 3, Math.Sign(b And (2 ^ 4)))
SetBit(out, 4, Math.Sign(b And (2 ^ 5)))
g = color.G
SetBit(out, 5, Math.Sign(g And (2 ^ 1)))
SetBit(out, 6, Math.Sign(g And (2 ^ 2)))
SetBit(out, 7, Math.Sign(g And (2 ^ 3)))
SetBit(out, 8, Math.Sign(g And (2 ^ 4)))
SetBit(out, 9, Math.Sign(g And (2 ^ 5)))
SetBit(out, 10, Math.Sign(g And (2 ^ 6)))
r = color.R
SetBit(out, 11, Math.Sign(r And (2 ^ 1)))
SetBit(out, 12, Math.Sign(r And (2 ^ 2)))
SetBit(out, 13, Math.Sign(r And (2 ^ 3)))
SetBit(out, 14, Math.Sign(r And (2 ^ 4)))
SetBit(out, 15, Math.Sign(r And (2 ^ 5)))
SerialPort1.WriteLine(out.ToString() + Chr(13)) '<<<<<<<<<<<<<<<<<<-------------------
For a = 0 To 80000
Next
Loop
End Sub