Avatar billede Dan Elgaard Ekspert
01. maj 2006 - 10:02 Der er 9 kommentarer og
1 løsning

VBA: Finde ud af om tal/byte er "aktivt" i binært tal?

Jeg er på udkig efter hjælp til, hvordan man kan finde ud af om et bestemt nummer er "aktiveret" i et binært tal?

Forstået på følgende måde:

Talrækken er, som de fleste bekendt, 1, 2, 4, 8, 16 osv...
Tallet 4 vil så være "aktivt" i tallene 4, 12, 20, 28, 36 osv....

Jeg vil gerne have en (kort) metode til at finde ud af om et givet tal er "aktivt" i et givent binært tal?
F.eks. 8/136 vil give SAND, mens 4/136 vil give FALSK, og 16/80 giver SAND, o.s.v.

Håber, jeg har forklaret mig tydeligt nok :-)
Avatar billede excelent Ekspert
01. maj 2006 - 11:05 #1
Hvis værdi i A1 finds i A2 så Sand ellers Falsk

=HVIS(ER.FEJL(SØG(DEC.TIL.BIN(A1);DEC.TIL.BIN(A2);1));"Falsk";"Sand")
Avatar billede Dan Elgaard Ekspert
01. maj 2006 - 11:17 #2
Heh, heh - nu skrev jeg jo VBA, men måske er det ikke præcist nok  :-)

Men for at præciserer:

Hvordan gør man det i en makro (VBA: VisualBasic for Applications), fremfor, hvordan man gør det i en alm. regnearksfunktion?
Avatar billede excelent Ekspert
01. maj 2006 - 11:25 #3
Sub Makro4()
    Range("A3").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(ISERROR(SEARCH(DEC.TIL.BIN(R[-2]C),DEC.TIL.BIN(R[-1]C),1)),""Falsk"",""Sand"")"
    Range("A4").Select
End Sub
Avatar billede excelent Ekspert
01. maj 2006 - 11:40 #4
kan ikke finde den tilsvarende funktion i VBA
Avatar billede bak Seniormester
01. maj 2006 - 14:13 #5
Function IsInBin(Check_What As Long, Check_For As Long) As Boolean
  Dim Small_Bin As Variant
  Dim Big_Bin As Variant
  Dim Temp As Variant
  Small_Bin = Evaluate("dec2bin(" & Check_For & ")")
  Big_Bin = Evaluate("dec2bin(" & Check_What & ")")
  On Error Resume Next
  Temp = Evaluate("=FIND(" & Small_Bin & "," & Big_Bin & ",LEN(" & Big_Bin & ")-LEN(" & Small_Bin & ")+1)")
  If InStr(Temp, "Error") Then IsInBin = False Else IsInBin = True
End Function
Avatar billede Dan Elgaard Ekspert
01. maj 2006 - 14:31 #6
Spiller, Bak (Udtales Bach :-)

Smid et svar og du får et svar af mig...
Avatar billede bak Seniormester
01. maj 2006 - 14:41 #7
ok :-)
Avatar billede Dan Elgaard Ekspert
01. maj 2006 - 15:07 #8
Og, her er det evige endegyldige svar: 42  :-)
Avatar billede Dan Elgaard Ekspert
01. maj 2006 - 15:20 #9
Der går da noget galt, Bak!

Din funktion giver FALSK ved 15,4!

Men 4 er da med i 15?!?  1+2+4+8 = 15
Avatar billede bak Seniormester
01. maj 2006 - 15:54 #10
enig, den er helt gal.
Den virkede på dit eksempel men ellers :-(
Brug Leo's :-), kortere hurtige og meget bedre

Function BitwiseAnd(Topotens, Tal)
BitwiseAnd = (Topotens And Tal) = Topotens
End Function


Point kommer retur her
http://www.eksperten.dk/spm/706515
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester