Problème opérateurs binaires
Résolu/Fermé
lenouveau82
Messages postés
53
Date d'inscription
mercredi 7 décembre 2016
Statut
Membre
Dernière intervention
30 juillet 2024
-
28 avril 2022 à 11:42
lenouveau82 Messages postés 53 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 30 juillet 2024 - 28 avril 2022 à 14:58
lenouveau82 Messages postés 53 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 30 juillet 2024 - 28 avril 2022 à 14:58
A voir également:
- Problème opérateurs binaires
- Binaires - Guide
- Les données de chaîne ou binaires seront tronquées. - Forum Programmation
- Avoir 2 opérateurs mobile - Forum Mobile
- Enregistrement des conversations téléphoniques par les opérateurs - Forum telephonie fixe
- Deux forfaits chez deux opérateurs différents - Forum Mobile
2 réponses
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 28 avril 2022 à 14:55
Modifié le 28 avril 2022 à 14:55
Pour la première macro, l'opérateur << fait un décalage vers la gauche des bits contenus dans les variables a, b, g et r dont les valeurs sont combinées avec un ou logique dans quelque chose qui devrait avoir un type uint32_t, la valeur de a étant décalée de 24 bits, celle de b de 16 bits, celle de g de 8 et celle de r restant comme elle est.
Le résultat est stocké en mémoire dans l'ordre : a b g r.
donne :
Cela fonctionne sous réserve que a, b, g, r soient des int8_t (ou un type supérieur à condition que les bits 0 à 7 soient les seuls à contenir des 1).
Les autres macro font des décalages vers la droite d'un uint32_t et utilisent un transtypage sur un byte pour obtenir le dernier byte (formé des bits se retrouvant alors en positions 0 à 7). Cela permet d'extraire les composantes souhaitées selon le nombre de bits décalés.
Dal
Le résultat est stocké en mémoire dans l'ordre : a b g r.
#include <stdio.h> #include <stdint.h> #include <inttypes.h> #define mRGBA (((uint32_t)a<<24)|((uint32_t)b<<16)|((uint32_t)g<<8)|((uint32_t)r<<0)) int main(void) { int8_t a = 0xf; int8_t b = 0x33; int8_t g = 0x22; int8_t r = 0x11; uint32_t my_RGBA = mRGBA; printf("my_RGBA = %08"PRIx32"\n", my_RGBA); return 0; }
donne :
my_RGBA = 0f332211
Cela fonctionne sous réserve que a, b, g, r soient des int8_t (ou un type supérieur à condition que les bits 0 à 7 soient les seuls à contenir des 1).
Les autres macro font des décalages vers la droite d'un uint32_t et utilisent un transtypage sur un byte pour obtenir le dernier byte (formé des bits se retrouvant alors en positions 0 à 7). Cela permet d'extraire les composantes souhaitées selon le nombre de bits décalés.
Dal
yg_be
Messages postés
23337
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
Ambassadeur
1 551
Modifié le 28 avril 2022 à 14:06
Modifié le 28 avril 2022 à 14:06
bonjour,
je peux deviner ce que cela fait.
pour en être certain, il faudrait voir comment c'est utilisé.
montre nous un exemple de programme.
Le premier pourrait être utilisé pour assigner à une variable de 32 bits la concaténation de 4 octets.
Le second pourrait être utilisé pour extraire chacun des 4 octets d'une variable de 32 bits.
je peux deviner ce que cela fait.
pour en être certain, il faudrait voir comment c'est utilisé.
montre nous un exemple de programme.
Le premier pourrait être utilisé pour assigner à une variable de 32 bits la concaténation de 4 octets.
Le second pourrait être utilisé pour extraire chacun des 4 octets d'une variable de 32 bits.
lenouveau82
Messages postés
53
Date d'inscription
mercredi 7 décembre 2016
Statut
Membre
Dernière intervention
30 juillet 2024
28 avril 2022 à 14:23
28 avril 2022 à 14:23
Merci de ta réponse, oui c'est ce que ça fait (à ceci près que le premier s'utilise directement avec la macro, il n'est pas nécessaire d'assigner la valeur à une variable) mais j'aurais voulu savoir ce qu'il se passe précisément au niveau binaire. Comment les 32 bits s'agencent ? Que font précisément les symboles << et >> ? Comment le deuxième fait pour extraire les valeurs de la variable concaténée ? En fait j'ai du mal à me représenter ce qu'il se passe en mémoire
28 avril 2022 à 14:58