VALEUR BINAIRE SANS CALCULS

Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005 - 3 août 2003 à 11:07
cs_Warning Messages postés 516 Date d'inscription samedi 3 février 2001 Statut Membre Dernière intervention 24 octobre 2006 - 7 sept. 2003 à 14:32
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/8130-valeur-binaire-sans-calculs

cs_Warning Messages postés 516 Date d'inscription samedi 3 février 2001 Statut Membre Dernière intervention 24 octobre 2006 2
7 sept. 2003 à 14:32
bah en plus ya un tit pb dans ma source... par exemple il convertit 65536 en 00000000.... no comment :P
Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008
6 sept. 2003 à 19:20
ouh! la vache... t'as avalé quoi ce jour là ? :) hébé... attend voir, j'ai ça dans mes vieilles sources :
Function ValToBinString(ByVal Vl As Byte) As String
For i = 0 To 7
c = Vl Mod 2
If c > 0 Then
c = 1
Vl = (Vl - 1) / 2
Else
Vl = Vl / 2
End If
ValToBinString = ValToBinString & c
Next i
End Function
mouais, non, ya pas photo... bon sang mais qu'est-ce que t'avais bouffé ??? :D
cs_Warning Messages postés 516 Date d'inscription samedi 3 février 2001 Statut Membre Dernière intervention 24 octobre 2006 2
6 sept. 2003 à 18:43
lol, vous voulez voir la routine de conversion que j'ai faite pour mes prog?

Public Function Bin(ValDec As Long) As String
Dim MVal As Double, BinLen As Long, BclLen As Double, i As Long
MVal = 0.5
BinLen = 1
BclLen = ValDec

While BclLen > 15
BinLen = BinLen + 1
BclLen = Sqr(BclLen)
Wend

For i = 1 To BinLen
MVal = MVal * 2
Bin = Fix(Val(ValDec) / (8 * (MVal ^ 4))) Mod 2 & Fix(Val(ValDec) / (4 * (MVal ^ 4))) Mod 2 & Fix(Val(ValDec) / (2 * (MVal ^ 4))) Mod 2 & Fix(Val(ValDec) / (MVal ^ 4)) Mod 2 & Bin
Next i
End Function

C completement idiot et je sais meme pas comment j'ai pu arrivé à ce résultat ...(avec des 0.5 lol) :P bref, c'est tout aussi bidon... On fait un concour??? :D

lol @++,Warning
Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008
3 août 2003 à 22:28
ok boursicotteur, bonne remarque. En fait y'a plus général encore, et on se débarasse du test : Mid(IntToBin, 1, 1) = Abs(CBool(IntVal And &H8000))

je persiste et signe a dire que cette source est bidon, car ya déjà 73 façons différente de convertir un ENTIER en BINAIRE sur ce site, mais j'en ai pas vu qui fassent DECIMALE vers BINAIRE (type single ou double avec mantisse et exposant)...
Qui plus est, c'est lent car ca fait de la manipulation de chaine de caractères à chaque ligne (m'enfin ca l'est moins que de la concaténation, je vous l'accorde)
boursicotteur Messages postés 201 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 10 novembre 2007
3 août 2003 à 21:24
Il y a une erreur dans ta fonction qui fait que les nombres négatifs sont convertis incorrectement en binaire.

Pour corriger l'erreur, change cette ligne:
Mid(IntToBin, 1, 1) = Abs((IntVal And &H8000) > 0)
par cette ligne:
Mid(IntToBin, 1, 1) = Abs((IntVal And &H8000) < 0)


Il y a une autre façon aussi rapide mais plus facile à comprendre:

Function IntToBin(IntVal As Long) As String
IntToBin = Hex(IntVal) 'Hex permet 32 bits max (type Long)
IntToBin = Replace(IntToBin, "0", "0000")
IntToBin = Replace(IntToBin, "1", "0001")
IntToBin = Replace(IntToBin, "2", "0010")
IntToBin = Replace(IntToBin, "3", "0011")
IntToBin = Replace(IntToBin, "4", "0100")
IntToBin = Replace(IntToBin, "5", "0101")
IntToBin = Replace(IntToBin, "6", "0110")
IntToBin = Replace(IntToBin, "7", "0111")
IntToBin = Replace(IntToBin, "8", "1000")
IntToBin = Replace(IntToBin, "9", "1001")
IntToBin = Replace(IntToBin, "A", "1010")
IntToBin = Replace(IntToBin, "B", "1011")
IntToBin = Replace(IntToBin, "C", "1100")
IntToBin = Replace(IntToBin, "D", "1101")
IntToBin = Replace(IntToBin, "E", "1110")
IntToBin = Replace(IntToBin, "F", "1111")
End Function

Tu remarquera ceci: IntVal As Long
Ca te permet des nombres signés de 32 bits (4 octets) dont la valeur est comprise entre -2 147 483 648 et 2 147 483 647.
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
3 août 2003 à 12:26
par rapport aux constantes physiques et mathématiques, c'est carrément mieux et avec un interet et tout.
Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005
3 août 2003 à 11:07
Ouai c'est très pratique mais remplace Mid par Mid$ tu gagneras beaucoup en rapidité !

9/10
Rejoignez-nous