Bit-operationer - så fungerar dom
Förord
Bit-operationer används för att kunna göra flera test i en if-sats, använda flera flaggor till t.ex. Msgbox eller att få ut den första biten i ett tal. Bland annat... Du behöver två saker, Visual Basic och calc.exe (tryck [Win]+[R] och skriv calc.exe, byt till avancerat läge (visa/avancerad)) samt ett exempel program. (Laddas ner härifrån(7kb)) OBS! Om du använder byte variabler så kan det inte genereras negativa tal, om du däremot använder något annat så kan det bli negativt! Värt att veta, när du skriver =-) Alla sanningtabeller är kopierade direkt från exempelprogrammetInnehåll
»»
»
»
»
»
»
»
»
»
Vad då "bit-operatorer"?
Vad är en bit-operator?
En bit-operator kan ta ett booleskt värde och jämföra det med ett annat booleskt värde och ge ett nytt booleskt värde som resultat. Om du vill använda en "normal" operator (+, -, *, /, mod) så skriver du:resultat = något operator något
Nu är det så fint ordnat med dessa bit-operatorer att de fungerar precis som en "normal" operator:
resultat = något bit-operator något
Vilka bit-operatorer finns?
Det finns ett antal bit-operatorer, närmare bestämt 6 st:- Not
- And
- Or
- Xor
- Eqv
- Imp
Vilka typer?
Vilka variabel-typer kan man använda?Du kan stoppa in två(en) Boolean och få en Boolean som svar... Eller:
Du kan stoppa in två(en) Heltal (Byte, Integer, Long) och få ett heltal som svar, då fungerar den lite annorlunda nämligen...
Till detta exempel används Not. OBS! 7-0 är bit-positionen i en Byte.
Exempel: 157 med Not blir 98 (!)
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
Som du ser så görs det en invertering på varje position, en i taget. Skulle du utföra en simpel invertering i t.ex. så skulle resultatet bli -158 istället. Den använder inte Not!
Bitar?
Vad är bitar?En bit är en del av en Byte, Integer eller Long. Mer exakt kanske?
Vi tar Byte som exempel.
I en Byte har du 8 bitar (numrerade från 0 till 7). Varje bit kan ha 2 värden, nämligen 0 och 1. Om du tar 2^8 (2 upphöjt med 8) så får du storleken på en Byte. Om man gör en snabb jämförelse mellan vårt talsystem (0 till 9) och datorns (0 till 1) så ser du direkt: De är inte lika. En Byte sparas i en dator på en minnes-adress. På den här adressen finns det 8 stycken Bitar som du kan använda. När det gäller Integer, Long, etc. så är det andra längder som gäller. Med bit-operatorer så kan du manipulera varje enskild liten bit på den här minnes-adressen. Det är ett starkt användningsområde för bit-operatorer.
De olika bit-operatorerna
Not
Den enda bit-operatorn som inte används på "normalt" sätt.Syntax
resultat = Not uttryck
Sanningtabell
1|2|R
1 X 0
0 X 1
Hur den fungerar
Den inverterar ett Boolean-uttryck (True/False), dvs. Om den tar in False så skickar den ut True
Exempel
Dim Result
Result = Not True 'Result är False
Result = Not False 'Result är True
Result = Not (5<7) 'Result är False
Result = Not (157) 'Result är 98 (157 = 10011101, 98 = 01100010)
if Not True then
'körs inte, eftersom att true inverterat blir false
else
'körs
end if
And
Syntaxresultat = uttryck And uttryck
Sanningtabell
1|2|R
0 0 0
1 0 0
0 1 0
1 1 1
Hur den fungerar
Den tar två Boolean-uttryck (True/False), och om båda är True så retunerar den True, annars False
Exempel
Dim Result
Result = True And True 'Result är True
Result = (4=4) And False 'Result är False
Result = Not(Result) And (6>0) 'Result är True
Result = 158 And 15 'Result blir dom fyra första bitarna, fundera lite på det. Använda calc.exe i avancerat läge. Dom fyra första bitarna i 158 är 14 (158 = 10011110, 15 = 1111, 14 = 1110)
if me.caption = "hej" And not false then
'kommer köras ifall test1 (me.caption = "hej") och test två (not false = true (Se Not-operatorn)) är sant
else
'kommer köras ifall test1 eller test2 inte är sant
end if
Or
SyntaxReslutat = uttryck Or uttryck
Sanningtabell
1|2|R
0 0 0
1 0 1
0 1 1
1 1 1
Hur den fungerar
Om något uttryck är True så skickar den tillbaks True, annars False
Exempel
Dim Result
Result = True Or False 'Result är True
Result = False Or False 'Result är False
Result = True Or True 'Result är True
Result = 35 Or 56 'Result är 59 (35 = 100011, 56 = 111000, 59 = 111011)
msgbox "Lever du?", vbInformation Or vbYesNo Or vbDefaultButton1, "?" 'Kommer visa en msgbox med Informations-bild samt en ja-knapp och en nej-knapp där Ja är markerad. Här ser du att man kan använda Or på konstanter (I det här fallet fungerar + bra också, men med Or så kan du ha dubbletter utan att det gör något)
Xor - Nästan Or
SyntaxReslutat = uttryck Xor uttryck
Sanningtabell
1|2|R
0 0 0
1 0 1
0 1 1
1 1 0
Hur den fungerar
Om uttrycken är olika så retunerar den True, om dom är lika så retunerar den False
Exempel
Dim Result
Result = True Xor False ' Result är True
Result = True Xor True 'Result är False
Result = False Xor False 'Result är False
Result = 200 Xor 100 'Result är 172 OBS! Den här metoden är användbar till kryptering, kolla nästa rad. (200 = 11001000, 100 = 1100100, 172 = 10101100)
Result = 172 Xor 100 'Result är 200! Kolla föregående rad
'Kryptera talet 123 med nyckeln 34:
Result = 123 Xor 34
'Dekryptera det krypterade talet 89 med nyckeln 34:
Result = 89 Xor 34
'Som du ser så används exakt samma nyckel för både kryptering och dekryptering
Eqv
Syntax:Reslutat = uttryck Eqv uttryck
Sanningtabell
1|2|R
0 0 1
1 0 0
0 1 0
1 1 1
Hur den fungerar:
Om uttrycken är lika så retunerar den True, annars False (Motsatsen till Xor)
Exempel
Dim Result
Result = True Eqv True 'Result är True
Result = True Eqv False 'Result är False
Result = False Eqv False 'Result är True
Result = 132 Eqv 96 'Result är 27(132 = 10000100, 96 = 1100000, 27 = 11011)
'Testa ifall två radioknappar är lika:
if opt1.Value Eqv op2.Value then
'Körs om de är lika
else
'Körs om de inte är lika
end if
Imp
Syntax:Reslutat = uttryck Imp uttryck
Sanningtabell
1|2|R
0 0 1
1 0 0
0 1 1
1 1 1
Hur den fungerar:
Om de är lika eller om uttryck 2 är sant så retunerar den sant
Exempel
Dim Result
Result = True Imp True 'Result är True
Result = False Imp True 'Result är True
Result = True Imp False 'Result är False
Result = 78 Imp 123 'Result är 251 (78 = 1001110, 96 = 1111011, 251 = 11111011)
'Den här operatorn har jag inget vettigt exempel till dessvärre... Om DU har ett vettigt exempel, skicka ett iMail till mig!
"Guldklimpar"
- Funktionen IIF(Ett booleanskt test, Om True, Om False)
Bra att ha ifall man inte vill använda en massa vanliga if-satservid en strängtilldelning, t.ex:
strTemp = "Vill du ta bort fil" & iif(lngFiles = 1, "en", "erna") & " nu eller vill du vänta med att ta bort " & iif(lngFiles = 1, "den", "dem") & "?" - Variabel tilldelning (variabeln fylls med vad testet retunerade):
bolTemp = ((bolFilesFound And Not bolFilesHidden) Or bolFilesReadOnly)
bolTemp = strTemp = strFileName 'Retunerar True om strängarna är lika - Styla till en MsgBox:
If MsgBox("Har du ett namn?", vbQuestion Or vbYesNo Or vbDefaultButton2, "Namnlös? =D") = vbYes then MsgBox "Du är namnlös!", vbInformation Or vbOkOnly, "Namnlös!!! =D"
0 Kommentarer