Page 1 sur 2
Bits piochés ca et la
Publié : jeu. 10/mars/2016 18:36
par SPH
Salut la dedans !
Bon, je cherche un truc que je savais faire en ASM mais que je n'ai jamais reussi a faire en pb :
Prenons 2 nombres :
x=%00000011
et
y=%11110000
Comment "joindre" dans le nombre Z les 2 bits de poids faible de X et les 4 bits de poids fort de Y ?
z=%111111
Re: Bits piochés ca et la
Publié : jeu. 10/mars/2016 18:53
par SPH
a.b=%1
b.b=%11
c.b=%111
q.q=a*65536+b*256+c
Debug Bin(q)
; 10000001100000111
; comment avoir les 6 derniers bits dans une variable ?
Re: Bits piochés ca et la
Publié : jeu. 10/mars/2016 19:14
par Shadow
Salut SPH,
Je ne comprends pas se que tu veux faire
Pour qu'elle genre d'application ?
Re: Bits piochés ca et la
Publié : jeu. 10/mars/2016 19:27
par SPH
Code : Tout sélectionner
a.b=%1
b.b=%11
c.b=%111
q.q=a*65536+b*256+c
Debug Bin(q)
; 10000001100000111
a$=Str(Bin(q))
Debug a$
Bon, je vais m'y prendre autrement.
Comment avoir un a$ qui se remplis de '10000001100000111' ?
Re: Bits piochés ca et la
Publié : jeu. 10/mars/2016 19:31
par Shadow
Tu n'est pas assez clair dans ta demande SPH.
Si je me fies à ce que tu dis là, ça donne ça.
Mais c'est pas se que tu veux donc explique toi mieux.
Re: Bits piochés ca et la
Publié : jeu. 10/mars/2016 19:38
par SPH
J'ai ma reponse. C'etait tout bete :
Code : Tout sélectionner
a.b=%1
b.b=%11
c.b=%111
q.q=a*65536+b*256+c
Debug Bin(q)
; 10000001100000111
Debug Right(Bin(q), 6)
Re: Bits piochés ca et la
Publié : jeu. 10/mars/2016 19:41
par Anonyme2
SPH a écrit :Salut la dedans !
Bon, je cherche un truc que je savais faire en ASM mais que je n'ai jamais reussi a faire en pb :
Prenons 2 nombres :
x=%00000011
et
y=%11110000
Comment "joindre" dans le nombre Z les 2 bits de poids faible de X et les 4 bits de poids fort de Y ?
z=%111111
SPH a écrit :a.b=%1
b.b=%11
c.b=%111
q.q=a*65536+b*256+c
Debug Bin(q)
; 10000001100000111
; comment avoir les 6 derniers bits dans une variable ?
Code : Tout sélectionner
b.b=%11
c.b=%111
q.q=a*65536+b*256+c
Debug Bin(q)
z.q = q & %111111
Debug RSet(Bin(z), 17, "0")
Re: Bits piochés ca et la
Publié : jeu. 10/mars/2016 19:45
par SPH
Et bin, j'ai encore beaucoup a apprendre !
Je ne m'etais jamais attardé dans les BIN et compagnie !
Merci Denis

Re: Bits piochés ca et la
Publié : jeu. 10/mars/2016 20:48
par Shadow
Le binaire est très facile à apprendre contrairement à se que l'on peut croire !
Vraiment très facile !
Tu prends chaque chiffre dans l'ordre de Gauche à droite.
Tu multiplie par 2 à chaque fois que tu prends un nouveau chiffre.
Peu importe que se soit 0 ou 1, tu multiplie toujours le totale que tu as retenue par 2, puis tu ajoute le chiffre.
Regarde c'est super facile !
Le binaire standard commence TOUJOURS par 1.
101 = ?
Au début ont commence TOUJOURS à 0 et ont multiplie toujours par 2, car c'est une base 2.
Il faut aussi que tu ajoute dans ta tête TOUJOURS un 0 avant ta chaîne binaire !
Donc passons à la pratique maintenant:
101 = 0101 (Le 0 avant la chaîne binaire n'existe que théoriquement)
0 (Premier Chiffre = 0) * 2 = 0 + 1 (Le deuxième chiffre, le premier en faite) = 1
Ensuite ont multiplie TOUJOURS par 2 (Car c'est une base 2).
1 * 2 = 2 + 0 = 2
2 * 2 = 4 + 1 = 5
101 = 5
Tien, j'ai fais ça juste pour toi:
Tien, encore une:

Re: Bits piochés ca et la
Publié : jeu. 10/mars/2016 21:13
par SPH
Tien, j'ai fais ça juste pour toi:
Merci, mais j'etais au courant

Re: Bits piochés ca et la
Publié : jeu. 10/mars/2016 21:59
par TazNormand
@Shadow : la logique du binaire est qu'il faut lire de droite à gauche, contrairement à ce que tu dis.
Chaque bit correspond à une puissance 2^position du bit en commençant donc à 2^0, et si le bit à la valeur 1, tu prends en compte la valeur de cette puissance de 2 et tu l'additionnes aux autres valeurs des bits.
Donc quand tu as %101 en binaire, cela correspond de droite à gauche :
2^0 + rien (valeur du bit à zéro) + 2^2 = 1 +0+4 = 5
un chiffre quel qu'il soit élevé à la puissance 0 vaut toujours 1 !
on peut aussi utiliser les parenthèses pour multiplier par la valeur des bits :
1x(2^0) + 0x(2^1) + 1x(2^2) = 1x1 + 0x2 + 1x4 = 1 + 0 + 4 =5
Les valeurs des puissances de 2 sont assez faciles à mémoriser jusqu'à un certain nombre, après ça se corse : 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,...
Re: Bits piochés ca et la
Publié : jeu. 10/mars/2016 23:53
par Shadow
Et bien et bien, moi ainsi comme je fais, cela fonctionne !
C'est le principale non ?
Re: Bits piochés ca et la
Publié : ven. 11/mars/2016 1:01
par falsam
@Shadow : Une autre méthode est la division euclidienne.
On divise le nombre décimale par 2 et on note le reste de la division.
On refait la même chose avec le quotient précédent, et on note à nouveau le reste.
101 : 2 = 50 + 1
50 : 2 = 25 + 0
25 : 2 = 12 + 1
12 : 2 = 6 + 0
6 : 2 = 3 + 0
3 : 2 = 1 + 1
1 : 2 = 0 + 1
101 en binaire = 1100101
Heureusement Fred a fait simple Bin(101) = 1100101

Re: Bits piochés ca et la
Publié : ven. 11/mars/2016 1:15
par Shadow
Je sais !
Code : Tout sélectionner
Procedure.s BinMaison(Nombre.Q)
Binaire$ = ""
NombreSortie.Q = 0
Repeat
NombreSortie.Q = Nombre.Q / 2
Binaire$ + Str(Nombre.Q - (NombreSortie.Q * 2))
Nombre.Q = NombreSortie.Q
Until Nombre.Q = 0
ProcedureReturn ReverseString(Binaire$)
EndProcedure
Procedure BinValMaison(Bin$)
NombreSortie.Q = 0
Byte$ = ""
If Bin$ > ""
For Index = 1 To Len(Bin$)
Byte$ = Mid(Bin$, Index, 1)
If Byte$ = "0"
NombreSortie.Q * 2
ElseIf Byte$ = "1"
NombreSortie.Q * 2
NombreSortie.Q + 1
EndIf
Next
ProcedureReturn NombreSortie.Q
Else
ProcedureReturn 0
EndIf
EndProcedure
Bin$ = BinMaison(1851980669)
Nombre = BinValMaison("1101110011000101111101101111101")
Debug Bin$
Debug Nombre
Re: Bits piochés ca et la
Publié : ven. 11/mars/2016 1:29
par falsam
Shadow a écrit :Je sais !
Tu sais ! mais comme tu viens de le faire, tu persistes à faire des procédures maisons.
Il y des choses simple je t'assure :
Code : Tout sélectionner
Debug "Le nombre décimal 101 donne " + Bin(101) + " en binaire"
Debug "Le nombre binaire 1100101 donne " + Val("%" + 1100101) + " en décimal"