Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-11 23:53:22 - Eugen Fotogen, i forum visual basic - allmänt, Tråden har 11 Kommentarer och lästs av 861 personer

Hur kan man göra för att ändrar ett decimal tal till binärt
tex 237 till 11101101


Svara

Sv: Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-12 09:41:50 - Sven Åke Persson

Så här gör jag. Förmodar att du menar heltal. Decimaltal är lite lurigare
<code>
Option Explicit
Private Sub Command1_Click()
MsgBox BitConv(237) 'Test med 237
End Sub

Private Function BitConv(ByVal inByte As Byte) As String
Dim i As Long, helB As Byte, strTemp As String
helB = 128
For i = 8 To 1 Step -1
If inByte Mod helB = inByte Then
strTemp = strTemp & "0"
Else
strTemp = strTemp & "1"
inByte = inByte - helB
End If
helB = helB \ 2
Next 'i
BitConv = strTemp
End Function
</code>


Svara

Sv: Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-12 09:59:13 - Anders Vikström

Tjaba,

Jag har en liten snurra för att göra det du önskar. Den är skriven i C#, men du fattar säkert ändå vad den gör. Men, förmodligen finns det effektivare sätt att göra detta på:

        static string ToBinaryString(byte value)
        {
            StringBuilder builder = new StringBuilder(8);

            for (int i = 7; i >= 0; i--)
            {
                if ((value & (byte) Math.Pow(2, i)) > 0)
                    builder.Append("1");
                else
                    builder.Append("0");
            }

            return builder.ToString();
        }


Svara

Sv:Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-12 10:10:25 - Sven Åke Persson

Så här gör du om du vill omvandla 2 Byte / Integer
<code>
Option Explicit
Private Sub Command1_Click()
MsgBox BitConv(22300)
End Sub
Private Function BitConv(ByVal inInt As Long) As String
Dim i As Long, helInt As Long, strTemp As String
helInt = 32768
For i = 16 To 1 Step -1
If inInt Mod helInt = inInt Then
strTemp = strTemp & "0"
Else
strTemp = strTemp & "1"
inInt = inInt - helInt
End If
helInt = helInt \ 2
Next 'i
BitConv = strTemp
End Function
</code>


Svara

Sv: Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-12 12:10:40 - Niklas Jansson

SvenPons metod är bra mycket bättre än Anders Wikströms, såvida inte C# gör om 2^i som bit-shift.

Strängutökningen kan ta tid, men har man tur så är det en bra algoritm, så att det går ganska snabbt.
Men Svenpons metod kan göras aningen mer generell:

<code>
Public Function ByteToBitString (ByVal x As [...]) As String ' [...] är valfri typ
if x=0
ByteToBitString = "0"
elseif x=1
ByteToBitString = "1"
Else
ByteToBitString = IIf(x mod 2, "0", "1") & ByteToBitString (x/2)
End Function
</code>

Med reservation för att jag har satt "0" och "1" i fel ordning i IIF-en.

Det kan ytterligare snabbas upp genom att använda if-sats istället för IIF, och ytterligare en del genom att vända ordningen till
ByteToBitString (x/2) & IIf(x mod 2, "0", "1")

Och sist reversera strängen.

Bara en detalj.


Svara

Sv:Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-12 13:08:45 - Anders Vikström

Tack för tipsen Sven Åke och Niklas. Nu är ju detta inte "mitt" inlägg men jag tar tacksamt emot det förbättringsförslag som presenterats. Jag har därför muppad min rutin till följande som jag nu tror (???) är hyfsat effektiv:

        static string ToBinaryString(UInt64 value, int size)
        {
            StringBuilder builder = new StringBuilder(size);
            UInt64 mask = (UInt64) 1 << size - 1;

            for (int i = size; i > 0; i--)
            {
                if ((value & mask) > 0)
                {
                    builder.Append("1");
                }
                else
                {
                    builder.Append("0");
                }
                mask >>= 1;
            }

            return builder.ToString();
        }


Svara

Sv: Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-12 13:20:04 - Niklas Jansson

För en fix size så är det nog det mest effektiva som går att uppnå, ja!
Enda problemet är i så fall att räkna ut size, och det får man göra med logaritmer (vilket i praktiken blir en eller två Taylor-utvecklingar, som i sin tur kan ta lång tid på sig).

Sen är det ju iofs så att det här är VB (ej .NET)-forumet, och där saknas tyvärr bitshiftoperatorn.
Däremot skulle man kunna göra en array med int:ar eller long:ar där man bara sätter en bit, och sen använda den med Or och And, eftersom de dock är bitwise.


Svara

Sv:Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-12 14:58:14 - Sven Åke Persson

Niklas lösning ser genial ut ! Men jag får den inte att ge rätt svar att 237 blir 11101101
Koden nedan ger 010101111 dvs 9 tecken som är fel.
<code>
Option Explicit
Private Sub Command1_Click()
'237 till 11101101
MsgBox ByteToBitString(237)
End Sub

Private Function ByteToBitString(ByVal x As Byte) As String
If x = 0 Then
ByteToBitString = "0"
ElseIf x = 1 Then
ByteToBitString = "1"
Else
ByteToBitString = IIf(x Mod 2, "0", "1") & ByteToBitString(x / 2)
End If
End Function
</code>


Svara

Sv: Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-12 15:38:22 - Niklas Jansson

Ja, det var lite snurrigt på både ett och två och tre sätt. Korrekt är:

<code>
Private Function ByteToBitString(ByVal x As Byte) As String
If x = 0 Then
ByteToBitString = "0"
ElseIf x = 1 Then
ByteToBitString = "1"
Else
ByteToBitString = ByteToBitString(x \ 2) & IIf(x Mod 2, "1", "0")
End If
End Function
</code>


Svara

Sv:Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-12 22:34:00 - Sven Åke Persson

Det är ju genialt .Rekursivt anrop när det är som bäst.
Till Eugen detta är den optimala lösningen använd den här med tack till Niklas
<code>
Option Explicit
Private Sub Command1_Click()
MsgBox ByteToBitStr(237) 'Testa mot frågan 237
'Du kan testa vilket tal du vill dvs tal som är upp till Long max
End Sub

Private Function ByteToBitStr(ByVal inLng As Long) As String
Select Case inLng
Case Is = 0
ByteToBitStr = "0"
Case Is = 1
ByteToBitStr = "1"
Case Else
ByteToBitStr = ByteToBitStr(inLng \ 2) & IIf(inLng Mod 2, "1", "0")
End Select
End Function
</code>


Svara

Sv: Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-13 11:59:43 - Niklas Jansson

Sven: Om du är intresserad av att koll om den (kanske) lite mer effektiva metoden, är mer effektiv så är idén något i stil med:

<code>
'Det här får vara i en egen modul.
Private Bitmask (0 to 7) As Byte
Private initialized As Boolean

Public Function ByteToBitStr (Byte x) As String
if not initialized then initialize

dim i as integer
for i=7 to 0 step -1
if (x and BitMask(i)) then
ByteToBitStr = ByteToBitStr & "1"
else
ByteToBitStr = ByteToBitStr & "0"
end if
next i
end function

public sub initialize()
dim currentnumber as integer, i as integer
currentnumber=1
for i=0 to 7
Bitmask(i) = currentnumber
currentnumber=currentnumber*2
next
initialized=true
end sub
</code>

Man gör alltså en sekvens av bitmaskar 00000001, 00000010, ..., 10000000.
Sen 'and'-ar man dem mot talet, blir svaret noll så är den biten en 0:a, blir svaret skilt ifrån 0 så är den biten en 1:a.


Svara

Sv:Hur ändrar jag ett decimal tal till binärt

Postades av 2005-10-13 18:33:58 - Sven Åke Persson

mmm... också en lösning.En annan lösning jag tycker Ni skall kolla på är
Stefan Nilsson:s utmärkta Programarkivet:Konverterare för ASCII, Byte, Bit, CHR$


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 722
27 958
271 751
408
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies