Avatar billede michaeljuul Nybegynder
04. april 2005 - 19:53 Der er 31 kommentarer og
2 løsninger

Decimal til Binær nr2 (kabbak)

Kunne du prøve og se på den her http://www.duerher.dk/updir/Grundforloeb/Elforsyning/bin2.xls

I celle C3 prøv og skrive Binær tallet for 512 (00100000000)
Når man skriver det ind så fjerner den de 2 nuller foran. Så den under C3 tal skriver 256.

Kan du rette det til?
Avatar billede sjap Praktikant
04. april 2005 - 19:57 #1
Kan du ikke blot formatere cellen som tekst (dvs. @)
Avatar billede kabbak Professor
04. april 2005 - 20:01 #2
tekst hjælper, det skal alle binære celler være
Avatar billede michaeljuul Nybegynder
04. april 2005 - 20:01 #3
Det vil den ikke godtage i C3 og D3. I C3 er værdien =BIN.TIL.DEC(B4) og D3 =BIN.TIL.HEX(B4)

****RETTELSE**** Jeg har skrevet C3 og D3. Det er C4 og D4
Avatar billede sjap Praktikant
04. april 2005 - 20:01 #4
Nej det betyder jo ikke noget. De to foranstillede nuller betyder jo heller ikke noget (de giver jo 0). Mangler du ikke et nul bagefter?
Avatar billede michaeljuul Nybegynder
04. april 2005 - 20:05 #5
Ups jo der mangler et ;-) 001000000000

Hvis jeg laver B4 om til tekst så skriver den #NUM i C4 og D4.
Avatar billede sjap Praktikant
04. april 2005 - 20:07 #6
Hvis jeg formaterer den til tekst, så fungerer det fint.
Avatar billede kabbak Professor
04. april 2005 - 20:08 #7
brug

=DecValue(B4)
i C4
Avatar billede sjap Praktikant
04. april 2005 - 20:11 #8
michaeljuul > BIN.TIL.DEC-funktionen kan vist kun lide 10 tegn - prøv at fjerne nogen af nullerne - altså foran :0)
Avatar billede sjap Praktikant
04. april 2005 - 20:15 #9
kabbak > =DecValue(B4) giver 0!?
Avatar billede michaeljuul Nybegynder
04. april 2005 - 20:16 #10
Jeg har fjernet BIN.TIL.DEC I kan prøve og hente den igen og se om den er ok.
http://www.duerher.dk/updir/Grundforloeb/Elforsyning/bin2.xls

Hvis i gider og skrive tilbage bagefter. Så får i begge 100 Point hvis det er ok med jer
Avatar billede sjap Praktikant
04. april 2005 - 20:20 #11
Ok med mig.

Ser ud til at den er rigtig - MEN det forudsætter at du ALTID husker at skrive 12 tegn (en del af DecValue-funktionen?). I princippet kan du skrive 001 og så skriver den 512, og det er jo ikke helt korrekt :0)
Avatar billede kabbak Professor
04. april 2005 - 20:23 #12
Public Function HexValueToDecimal(HexVærdi As Range)
Dim HVærdi As String
HVærdi = "&h" & HexVærdi
HexValueToDecimal = Val(HVærdi)
End Function

her er en der regner hex om til decimal
Avatar billede michaeljuul Nybegynder
04. april 2005 - 20:25 #13
Åhh for pokker da.
Er det muligt at lave det sådan at man skriver det binær tal uden 12 tegn?
Altså F.eks. 1010 i stedet for 000000001010
Avatar billede kabbak Professor
04. april 2005 - 20:30 #14
Avatar billede kabbak Professor
04. april 2005 - 20:32 #15
Åhh for pokker da.
Er det muligt at lave det sådan at man skriver det binær tal uden 12 tegn?

joo, så skal der jo nok programmeres noget mere, tallet længst til venstre aniver om det er et positivt eller et negativt tal
Avatar billede michaeljuul Nybegynder
04. april 2005 - 20:34 #16
Har hentet den. Hvis jeg skriver 1010 i b4 så bliver C4 -512 og D4 FFFFFE00
Avatar billede kabbak Professor
04. april 2005 - 20:35 #17
ja du hænger stadig på 12 tegn
Avatar billede michaeljuul Nybegynder
04. april 2005 - 20:39 #18
Ok kom lige med et svar også.

Jeg skal lige høre om hvis jeg vil have den til at regne med tal større end 2047.
Er det så i linjen Bin = Array(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024) herunder jeg skal rette?


Public Function BinValue(Værdi As Range) As String
Dim TempBin As String
Application.Volatile
Bin = Array(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024)
Tempvalue = Abs(Værdi)
TempBin = ""
For i = 10 To 0 Step -1
If Tempvalue / Bin(i) >= 1 Then
TempBin = TempBin & "1"
Tempvalue = (Tempvalue - Bin(i))
Else
TempBin = TempBin & "0"
End If
Next
If Værdi < 0 Then
TempBin = "1" & TempBin
Else
TempBin = "0" & TempBin
End If
BinValue = TempBin
End Function
Avatar billede kabbak Professor
04. april 2005 - 20:55 #19
Avatar billede kabbak Professor
04. april 2005 - 20:56 #20
nu skal du bruge 15 tegn
Avatar billede michaeljuul Nybegynder
04. april 2005 - 21:00 #21
Tak. Har jeg forstået det rigtig at hvis jeg selv vil rette den med større tal, så skal jeg i denne linje Bin = Array(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192) forsætte med 16384, 32768, osv.. Og det sammen i Bin = Array(8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1)
Avatar billede michaeljuul Nybegynder
04. april 2005 - 21:01 #22
Hvorfor 15 tegn nu?
Avatar billede bak Seniormester
04. april 2005 - 21:05 #23
en lidt anden (og hugget) approach

Public Function LongDec2Bin(ByVal nIn As Long, _
                  Optional nBits As Long = 0&) As Variant
      'J.E. McGimpsey
      Dim nReqBits As Long
      Dim sOut As String
      Dim sBit As String
      Dim bNeg As Boolean
      Dim i As Long
      If nIn < 0& Then
        bNeg = True
        nIn = -(nIn + 1&)
      End If
      If nIn = 0& Then
        nReqBits = 1&
      Else
        nReqBits = Int(Log(nIn) / Log(2&)) + 1& - bNeg
      End If
      If nBits <= 0& Then nBits = nReqBits
      If nBits >= nReqBits Then
        If bNeg Then
            sOut = String(nBits, "1")
            sBit = "0"
        Else
            sOut = String(nBits, "0")
            sBit = "1"
        End If
        For i = nBits To (nBits - nReqBits + 1&) Step -1
            If (nIn - 2& * (nIn \ 2&)) > 0 _
                Then Mid(sOut, i, 1&) = sBit
            nIn = nIn \ 2&
        Next i
        LongDec2Bin = sOut
      Else
        LongDec2Bin = CVErr(xlErrNum)
      End If
  End Function

Public Function LongBin2Dec(BinVal As String) As String
Dim iVal#, temp#, i%, Length%

Length = Len(BinVal)
For i = 0 To Length - 1
    temp = CInt(Mid(BinVal, Length - i, 1))
    iVal = iVal + (temp * (2 ^ i))
Next i
LongBin2Dec = iVal
End Function
Avatar billede kabbak Professor
04. april 2005 - 21:07 #24
fordi hvergang du sætter et tal mere ind øges længden med 1
det er rigtig med arrayerne

du skal også lige rette

If Abs(Værdi) > 8192 Then BinValue = "For stort"

If Abs(Værdi) > 16383 Then BinValue = "For stort"
den skal have den næste værdi du ville skrive -1
Avatar billede kabbak Professor
04. april 2005 - 21:13 #25
det var på tide du kom på banen Bak.

jeg kan se at jeg brugte minus udregningerne forkert.

ifølge din funktion tager den maks bin og trækker fra , det viste jeg ikke, jeg arbejder jo ikke med bin til hverdag.
Avatar billede michaeljuul Nybegynder
04. april 2005 - 21:14 #26
Fint Kabbak. Det kunne jeg bruge. Smid et svar så få både dig og sjap Point.

Og til bak. Jeg laver lige et nyt spørgsmål " Decimal Bak " da jeg godt lige vil prøve din også. Og hvis jeg kan bruge den så får du også Point.

Er det ok?
Avatar billede kabbak Professor
04. april 2005 - 21:21 #27
ok et svar ;-))
Avatar billede bak Seniormester
04. april 2005 - 21:28 #28
Du skal ikke oprette et spm. til mig.
Test bare løs, men husk at kabbaks serviceniveau er højere end mit for tiden :-)
Avatar billede michaeljuul Nybegynder
04. april 2005 - 21:34 #29
Har lavet det. Og når jeg har skrevet de 2 funktioner ind.

Public Function LongDec2Bin(ByVal nIn As Long, _
                  Optional nBits As Long = 0&) As Variant
      'J.E. McGimpsey
      Dim nReqBits As Long
      Dim sOut As String
      Dim sBit As String
      Dim bNeg As Boolean
      Dim i As Long
      If nIn < 0& Then
        bNeg = True
        nIn = -(nIn + 1&)
      End If
      If nIn = 0& Then
        nReqBits = 1&
      Else
        nReqBits = Int(Log(nIn) / Log(2&)) + 1& - bNeg
      End If
      If nBits <= 0& Then nBits = nReqBits
      If nBits >= nReqBits Then
        If bNeg Then
            sOut = String(nBits, "1")
            sBit = "0"
        Else
            sOut = String(nBits, "0")
            sBit = "1"
        End If
        For i = nBits To (nBits - nReqBits + 1&) Step -1
            If (nIn - 2& * (nIn \ 2&)) > 0 _
                Then Mid(sOut, i, 1&) = sBit
            nIn = nIn \ 2&
        Next i
        LongDec2Bin = sOut
      Else
        LongDec2Bin = CVErr(xlErrNum)
      End If
  End Function

Public Function LongBin2Dec(BinVal As String) As String
Dim iVal#, temp#, i%, Length%

Length = Len(BinVal)
For i = 0 To Length - 1
    temp = CInt(Mid(BinVal, Length - i, 1))
    iVal = iVal + (temp * (2 ^ i))
Next i
LongBin2Dec = iVal
End Function


Så skriver den #NAVN i B4 og D4
Avatar billede kabbak Professor
04. april 2005 - 21:35 #30
http://www.kabbak.dk/eksperten/bin2.xls

det er fordi du mangler 2 af mine, de er sat ind her
Avatar billede michaeljuul Nybegynder
04. april 2005 - 21:38 #31
Kanon. Mange tak igen :-)
Kan du ikke lave et svar i det andet spørgsmål " Decimal Bak " så er der lidt flere Point
Avatar billede kabbak Professor
04. april 2005 - 21:41 #32
ikke nødvendig, jeg har fået nok ;-))
Avatar billede michaeljuul Nybegynder
04. april 2005 - 21:43 #33
ok
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