OVH Cloud OVH Cloud

Binaire

7 réponses
Avatar
garnote
Bonjour mes vous tous et toutes,

Voici une tite macro qui transforme un nombre
entier positif en binaire. Elle devient incompétente
à partir de ce nombre : 2 147 483 648.
Pourquoi lui plutôt qu'un autre ?
Pourrions-nous aller plus loin ?
J'utilise un Excel qui ne contient pas la fonction DECBIN.
Quel est le plus grand nombre entier que
DECBIN peut écrire en binaire ?

Merci,
Serge

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = n \ 2
b(0) = n Mod 2
For i = 1 To k
b(i) = pe(i - 1) Mod 2
pe(i) = pe(i - 1) \ 2
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function

7 réponses

Avatar
lSteph
Bonsoir Serge,
c'est la limite du type Long!

lSteph
"garnote" a écrit dans le message de news:

Bonjour mes vous tous et toutes,

Voici une tite macro qui transforme un nombre
entier positif en binaire. Elle devient incompétente
à partir de ce nombre : 2 147 483 648.
Pourquoi lui plutôt qu'un autre ?
Pourrions-nous aller plus loin ?
J'utilise un Excel qui ne contient pas la fonction DECBIN.
Quel est le plus grand nombre entier que
DECBIN peut écrire en binaire ?

Merci,
Serge

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = n 2
b(0) = n Mod 2
For i = 1 To k
b(i) = pe(i - 1) Mod 2
pe(i) = pe(i - 1) 2
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function





Avatar
michdenis
Bonjour Garnote,

2 147 483 648 = 2 ^ 31

Ta version windows et les applications sont encore en 32 bits ?
ça signifie que le processseur ne peut lire des instructions réparties
sur plus de 32 bits... ça fait du sens ? ;-)

D'où le passage obligé en 64 bits pour bientôt ...

Et aussi bien te le dire tout de suite...
Bill ne pensait pas spécifiquement à ton problème ?
;-)


Salutations!



"garnote" a écrit dans le message de news:
Bonjour mes vous tous et toutes,

Voici une tite macro qui transforme un nombre
entier positif en binaire. Elle devient incompétente
à partir de ce nombre : 2 147 483 648.
Pourquoi lui plutôt qu'un autre ?
Pourrions-nous aller plus loin ?
J'utilise un Excel qui ne contient pas la fonction DECBIN.
Quel est le plus grand nombre entier que
DECBIN peut écrire en binaire ?

Merci,
Serge

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = n 2
b(0) = n Mod 2
For i = 1 To k
b(i) = pe(i - 1) Mod 2
pe(i) = pe(i - 1) 2
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function
Avatar
Clément Marcotte
Bonjour,

Va peut-être falloir que t'aille zigonner un peu avec le type "Currency". Me
semble que fondamentalement cela passe par un entier codé sur je pense 64
bits.

Avec un peu de chance, m'a pouvoir essayer de creuser un peu plus tard. Mais
là j'ai une affaire urgente qui m'attend. (Trouver le moyen de "sortir" une
photo numérique et de l'envoyer au plus sacrant.)


"garnote" a écrit dans le message de news:

Bonjour mes vous tous et toutes,

Voici une tite macro qui transforme un nombre
entier positif en binaire. Elle devient incompétente
à partir de ce nombre : 2 147 483 648.
Pourquoi lui plutôt qu'un autre ?
Pourrions-nous aller plus loin ?
J'utilise un Excel qui ne contient pas la fonction DECBIN.
Quel est le plus grand nombre entier que
DECBIN peut écrire en binaire ?

Merci,
Serge

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = n 2
b(0) = n Mod 2
For i = 1 To k
b(i) = pe(i - 1) Mod 2
pe(i) = pe(i - 1) 2
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function





Avatar
garnote
Mais que fait donc p.gif (952 octets) dans mon message précédent ?
Je n'ai rien joint, moé !

Serge


"garnote" a écrit dans le message de news:

Ça y est, j'ai trouvé un truc pour binairer
de gros nombres. C'est n Mod 2 et n 2
de VBA qui causaient problème. Ils ne veulent
rien savoir si n > 2 ^31.
Mais en remplaçant n Mod 2 par n - 2 * Int ( n / 2)
et n 2 par Int (n / 2), ça fonctionne.

binaire(999999999999999) renvoie
11100011010111111010100100110001100111111111111111

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = Int(n / 2)
b(0) = n - 2 * Int(n / 2)
For i = 1 To k
b(i) = pe(i - 1) - 2 * Int(pe(i - 1) / 2)
pe(i) = Int(pe(i - 1) / 2)
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function
























"Clément Marcotte" a écrit dans le
message

de news:
Bonjour,

Va peut-être falloir que t'aille zigonner un peu avec le type
"Currency". Me

semble que fondamentalement cela passe par un entier codé sur je
pense


64
bits.

Avec un peu de chance, m'a pouvoir essayer de creuser un peu plus
tard.


Mais
là j'ai une affaire urgente qui m'attend. (Trouver le moyen de
"sortir"


une
photo numérique et de l'envoyer au plus sacrant.)


"garnote" a écrit dans le message de news:

Bonjour mes vous tous et toutes,

Voici une tite macro qui transforme un nombre
entier positif en binaire. Elle devient incompétente
à partir de ce nombre : 2 147 483 648.
Pourquoi lui plutôt qu'un autre ?
Pourrions-nous aller plus loin ?
J'utilise un Excel qui ne contient pas la fonction DECBIN.
Quel est le plus grand nombre entier que
DECBIN peut écrire en binaire ?

Merci,
Serge

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = n 2
b(0) = n Mod 2
For i = 1 To k
b(i) = pe(i - 1) Mod 2
pe(i) = pe(i - 1) 2
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function









--------------------------------------------------------------------------------







--------------------------------------------------------------------------------



begin 666 p.gif
M1TE&.#EA'0$A`)$"`"5'M#8V-O___P```"'Y! $```(`+ `````=`2$```+_
MC"^IRZWA'(RTVHO%U"^G[;AF945HJ*2Z7)8&]>Q8=NXM3-]7OOQ'K0<
MJ.A+SH#,2TN%;$9EHJ8NI;3"J$ZME_E?:M==@SY9X_BPFD!T=HA(>=/$F'
MSWWNS1O:]R'G9U)'=,061X/C)Y0X<@3Y<R<XZ$C$1æL>':,=9.,E&2D5(
M>GI82J@)T^þJJW5VHJ.(=8*[HJ`NO*B_H;K(LJ2]+H:XM[JV:XE8L*U,7
MND6[**P&G)D-6.CI".W<1CYLWBM,3;8Z'I':;*P+56X^?[YN^D;<;;V=JPQ/
M&:@!NFE.=<(X#MMW+[M6W:Q5C*$_UGB=7S&+^1 $@4)IBOY
M457&BA2M(=!9L,DD&-!.S)?)?+7P=>LD11]3K1Y*G60J
M"R8MB8<FYýLI*B%U;_M,)D]!(CG")EMAU&A?F>=,69M:Q69,<RB5W+
MX6W:92S6S!SB-[#@P65D^GU(V%T6DE> )GZ<F"AAQ)#!1?D:0I_FO"TK>P:B
M[C'FSZ05.RZ-.K7JU:Q;NWX-.[;LV;1KV[Z-.[?NW;Q[`P$`'( `X<,5$!=
MW$%RV&+^X9?/F7Y,"'2W]>.3KVS]772"=^?7OB*_)IS:?XSIX:31LW;?
MWGL%[0NJ@[]OO'N"X/J-Y_^GKIQU#?3778$",M!<?<L)IQ]_^RG87(':20A@
M?]8QV&!T"6*XGX7_S7<@@03Z=X9Y^)'8((HD.O?=>@>".&++P+X8(((KNCB
MA3)JB&./.N[887CTL8ACBC+Z.*"$,Z(XY'0@`HGD?38>61^55CJW9)178KDB
MED/2Z*66_QD98)9F<LE?BU/>"&5^2#I)P9PBEDG%>J-R>8]-7)9IM-RNGG
MG'T&^.>18)8)(:!>,'F^"2B?9>(YX*-B2MJEHH=.J2B7759:*)J"(OID
MF*:>6J*@FNYIGYB6HNJFJ+)&&$&DJF;ZZ8P&NDKHJXS*ZBFLMV9))GSIV1AA
MAK]8=KBHA@[&^&.T_GE(+:-K?,G:1Z&(+(KH;*FQ,BOMM4'&R2V&
M[9;QH6;L:@NRMUN:]MZ+;[[Z[LMOO_[^"W# `@],<,$&_RNOAX^9*UN:].I6
#```[
`
end



Avatar
Clément Marcotte
C'est un message qui dit que ton envoi a été protégé par un anti-spam. C'est
peut-être un cadeau de ton FAI

"garnote" a écrit dans le message de news:
%

Mais que fait donc p.gif (952 octets) dans mon message précédent ?
Je n'ai rien joint, moé !

Serge


"garnote" a écrit dans le message de news:

Ça y est, j'ai trouvé un truc pour binairer
de gros nombres. C'est n Mod 2 et n 2
de VBA qui causaient problème. Ils ne veulent
rien savoir si n > 2 ^31.
Mais en remplaçant n Mod 2 par n - 2 * Int ( n / 2)
et n 2 par Int (n / 2), ça fonctionne.

binaire(999999999999999) renvoie
11100011010111111010100100110001100111111111111111

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = Int(n / 2)
b(0) = n - 2 * Int(n / 2)
For i = 1 To k
b(i) = pe(i - 1) - 2 * Int(pe(i - 1) / 2)
pe(i) = Int(pe(i - 1) / 2)
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function
























"Clément Marcotte" a écrit dans le
message

de news:
Bonjour,

Va peut-être falloir que t'aille zigonner un peu avec le type
"Currency". Me

semble que fondamentalement cela passe par un entier codé sur je
pense


64
bits.

Avec un peu de chance, m'a pouvoir essayer de creuser un peu plus
tard.


Mais
là j'ai une affaire urgente qui m'attend. (Trouver le moyen de
"sortir"


une
photo numérique et de l'envoyer au plus sacrant.)


"garnote" a écrit dans le message de news:

Bonjour mes vous tous et toutes,

Voici une tite macro qui transforme un nombre
entier positif en binaire. Elle devient incompétente
à partir de ce nombre : 2 147 483 648.
Pourquoi lui plutôt qu'un autre ?
Pourrions-nous aller plus loin ?
J'utilise un Excel qui ne contient pas la fonction DECBIN.
Quel est le plus grand nombre entier que
DECBIN peut écrire en binaire ?

Merci,
Serge

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = n 2
b(0) = n Mod 2
For i = 1 To k
b(i) = pe(i - 1) Mod 2
pe(i) = pe(i - 1) 2
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function









--------------------------------------------------------------------------------







--------------------------------------------------------------------------------









Avatar
Clément Marcotte
Bonjour,

Je prend pour acquis que tu as vérifié ta réponse...


"garnote" a écrit dans le message de news:

Ça y est, j'ai trouvé un truc pour binairer
de gros nombres. C'est n Mod 2 et n 2
de VBA qui causaient problème. Ils ne veulent
rien savoir si n > 2 ^31.
Mais en remplaçant n Mod 2 par n - 2 * Int ( n / 2)
et n 2 par Int (n / 2), ça fonctionne.

binaire(999999999999999) renvoie
11100011010111111010100100110001100111111111111111

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = Int(n / 2)
b(0) = n - 2 * Int(n / 2)
For i = 1 To k
b(i) = pe(i - 1) - 2 * Int(pe(i - 1) / 2)
pe(i) = Int(pe(i - 1) / 2)
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function
























"Clément Marcotte" a écrit dans le
message de news:
Bonjour,

Va peut-être falloir que t'aille zigonner un peu avec le type
"Currency". Me

semble que fondamentalement cela passe par un entier codé sur je pense
64

bits.

Avec un peu de chance, m'a pouvoir essayer de creuser un peu plus tard.
Mais

là j'ai une affaire urgente qui m'attend. (Trouver le moyen de "sortir"
une

photo numérique et de l'envoyer au plus sacrant.)


"garnote" a écrit dans le message de news:

Bonjour mes vous tous et toutes,

Voici une tite macro qui transforme un nombre
entier positif en binaire. Elle devient incompétente
à partir de ce nombre : 2 147 483 648.
Pourquoi lui plutôt qu'un autre ?
Pourrions-nous aller plus loin ?
J'utilise un Excel qui ne contient pas la fonction DECBIN.
Quel est le plus grand nombre entier que
DECBIN peut écrire en binaire ?

Merci,
Serge

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = n 2
b(0) = n Mod 2
For i = 1 To k
b(i) = pe(i - 1) Mod 2
pe(i) = pe(i - 1) 2
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function









--------------------------------------------------------------------------------








Avatar
garnote
Salut Clément,

;-)
Oui grâce à :
Function décimale(n As String)
nc = Len(n)
Dim nd As Double
For i = nc To 1 Step -1
If Mid(n, i, 1) = 1 Then nd = nd + 2 ^ (nc - i)
Next i
décimale = nd
End Function

Serge



"Clément Marcotte" a écrit dans le message
de news:
Bonjour,

Je prend pour acquis que tu as vérifié ta réponse...


"garnote" a écrit dans le message de news:

Ça y est, j'ai trouvé un truc pour binairer
de gros nombres. C'est n Mod 2 et n 2
de VBA qui causaient problème. Ils ne veulent
rien savoir si n > 2 ^31.
Mais en remplaçant n Mod 2 par n - 2 * Int ( n / 2)
et n 2 par Int (n / 2), ça fonctionne.

binaire(999999999999999) renvoie
11100011010111111010100100110001100111111111111111

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = Int(n / 2)
b(0) = n - 2 * Int(n / 2)
For i = 1 To k
b(i) = pe(i - 1) - 2 * Int(pe(i - 1) / 2)
pe(i) = Int(pe(i - 1) / 2)
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function
























"Clément Marcotte" a écrit dans le
message de news:
Bonjour,

Va peut-être falloir que t'aille zigonner un peu avec le type
"Currency". Me

semble que fondamentalement cela passe par un entier codé sur je pense
64

bits.

Avec un peu de chance, m'a pouvoir essayer de creuser un peu plus
tard. Mais

là j'ai une affaire urgente qui m'attend. (Trouver le moyen de
"sortir" une

photo numérique et de l'envoyer au plus sacrant.)


"garnote" a écrit dans le message de news:

Bonjour mes vous tous et toutes,

Voici une tite macro qui transforme un nombre
entier positif en binaire. Elle devient incompétente
à partir de ce nombre : 2 147 483 648.
Pourquoi lui plutôt qu'un autre ?
Pourrions-nous aller plus loin ?
J'utilise un Excel qui ne contient pas la fonction DECBIN.
Quel est le plus grand nombre entier que
DECBIN peut écrire en binaire ?

Merci,
Serge

Function binaire(n As Double) As String
'Convertit un nombre entier positif
'en binaire.
Dim b(), pe()
Dim nb As String, arrêt As String
Do Until arrêt = "oui"
i = i + 1
If 2 ^ i > n Then arrêt = "oui"
Loop
k = i - 1
ReDim b(k)
ReDim pe(k)
pe(0) = n 2
b(0) = n Mod 2
For i = 1 To k
b(i) = pe(i - 1) Mod 2
pe(i) = pe(i - 1) 2
Next i
For i = k To 0 Step -1
nb = nb & b(i)
Next i
binaire = nb
End Function









--------------------------------------------------------------------------------