Bits piochés ca et la

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Bits piochés ca et la

Message 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

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Bits piochés ca et la

Message 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 ?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Bits piochés ca et la

Message par Shadow »

Salut SPH,

Je ne comprends pas se que tu veux faire :?
Pour qu'elle genre d'application ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Bits piochés ca et la

Message 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' ?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Bits piochés ca et la

Message 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.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Bits piochés ca et la

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


!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Bits piochés ca et la

Message 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")
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Bits piochés ca et la

Message par SPH »

Et bin, j'ai encore beaucoup a apprendre !

Je ne m'etais jamais attardé dans les BIN et compagnie !

Merci Denis 8)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Bits piochés ca et la

Message 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
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Bits piochés ca et la

Message par SPH »

Tien, j'ai fais ça juste pour toi:
Merci, mais j'etais au courant :mrgreen:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Bits piochés ca et la

Message 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,...
Image
Image
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Bits piochés ca et la

Message par Shadow »

Et bien et bien, moi ainsi comme je fais, cela fonctionne !
C'est le principale non ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Bits piochés ca et la

Message 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:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Bits piochés ca et la

Message 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
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Bits piochés ca et la

Message 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"
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre