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.

Code : Tout sélectionner

A$ = Bin(Nombre.q)
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

Code : Tout sélectionner

x=%00000011
y=%11110000

z = x | (y >> 2)

Debug Bin(z)

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 8)

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:
Image

Tien, encore une:
Image

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 :mrgreen:

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 :wink:

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"