A voir également:
- [C]: Fonction StringToBin
- Fonction si et - Guide
- Fonction write c ✓ - Forum C
- Fonction si avec date ✓ - Forum Excel
- Ajout snap par la fonction - Forum Snapchat
- Fonction find vba - Astuces et Solutions
1 réponse
l'opérateur | est le or binaire, cad qu'il fonctionne au niveau des bits de n.
exemple : la chaine d'entrée est "101" (soit 5 écrit en binaire) et n est initialisé à 0 et mask à 1
boucle 0 : n = n | mask
n : 0000
mask : 0001
or ------------
n : 0001
puis on shift mask d'un bit vers la gauche (mask = 0010)
boucle 1 : le caractère dans la chaine est un zéro, on shift mask d'un bit vers la gauche (mask = 0100)
boucle 2 : n = n | mask
n : 0001
mask : 0100
or ------------
n : 0101
et on shift mask
fin de la boucle. On a donc positionné correctement les bits de n. afficher sa valeur en décimal donnera donc 5.
On observe que :
- un ou binaire (|) avec 0...0001 revient à forcer le lsb à 1
- un et binaire (&) avec 1...1110 revient à forcer le lsb à 0
(lsb = bit de poids faible = bit[0])
personnellement, j'aurais écrit la fonction comme ceci :
exercice pour toi: vérifie que tu comprends bien comment ça fonctionne ;-)
exemple : la chaine d'entrée est "101" (soit 5 écrit en binaire) et n est initialisé à 0 et mask à 1
boucle 0 : n = n | mask
n : 0000
mask : 0001
or ------------
n : 0001
puis on shift mask d'un bit vers la gauche (mask = 0010)
boucle 1 : le caractère dans la chaine est un zéro, on shift mask d'un bit vers la gauche (mask = 0100)
boucle 2 : n = n | mask
n : 0001
mask : 0100
or ------------
n : 0101
et on shift mask
fin de la boucle. On a donc positionné correctement les bits de n. afficher sa valeur en décimal donnera donc 5.
On observe que :
- un ou binaire (|) avec 0...0001 revient à forcer le lsb à 1
- un et binaire (&) avec 1...1110 revient à forcer le lsb à 0
(lsb = bit de poids faible = bit[0])
personnellement, j'aurais écrit la fonction comme ceci :
int StrToBin(char *str)
{
int l = strlen(str)-1;
int n = 0;
int c, j;
for (j = 0; j <= l; j++)
{
c = (str[j] == '0' ? 0 : 1);
n |= (c << (l-j));
}
return n ;
}
exercice pour toi: vérifie que tu comprends bien comment ça fonctionne ;-)