Bits piochés ca et la
Bits piochés ca et la
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
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
Re: Bits piochés ca et la
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 ?
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
Re: Bits piochés ca et la
Salut SPH,
Je ne comprends pas se que tu veux faire
Pour qu'elle genre d'application ?
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.
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.
Re: Bits piochés ca et la
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$
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
Re: Bits piochés ca et la
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.
Si je me fies à ce que tu dis là, ça donne ça.
Code : Tout sélectionner
A$ = Bin(Nombre.q)
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.
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.
Re: Bits piochés ca et la
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
Re: Bits piochés ca et la
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
Et bin, j'ai encore beaucoup a apprendre !
Je ne m'etais jamais attardé dans les BIN et compagnie !
Merci Denis
Je ne m'etais jamais attardé dans les BIN et compagnie !
Merci Denis

!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
Re: Bits piochés ca et la
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:

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:

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.
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.
Re: Bits piochés ca et la
Merci, mais j'etais au courantTien, j'ai fais ça juste pour toi:

!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
- TazNormand
- Messages : 1297
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Re: Bits piochés ca et la
@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,...
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
Et bien et bien, moi ainsi comme je fais, cela fonctionne !
C'est le principale non ?
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.
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.
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Bits piochés ca et la
@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
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

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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Bits piochés ca et la
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.
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.
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Bits piochés ca et la
Tu sais ! mais comme tu viens de le faire, tu persistes à faire des procédures maisons.Shadow a écrit :Je sais !
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%