J'écris un programme utilisant des opérateurs bit à bit en C. C'est pour une affectation scolaire et l'objectif est de compter le nombre de 1 dans la représentation binaire d'un entier, puis imprimer " Même "si le résultat est pair et" impair "si c'est impair.Utilisation des opérateurs bit à bit pour compter le nombre de
J'ai écrit un programme pour parcourir chaque bit et comparer l'entier entré avec un masque et incrémenter une variable de compteur pour chaque fois que l'opérateur AND bit à bit renvoie 1. Cependant, le programme ne semble pas incrémenter la variable compteur . Voici le code:
#include <stdio.h>
void bitsEvenOrOdd(int value);
int main(void) {
int integer;
printf("Enter an integer: ");
scanf("%d", &integer);
bitsEvenOrOdd(integer);
return 0;
}
void bitsEvenOrOdd(int value) {
unsigned int displayMask;
unsigned int i;
unsigned int counter;
counter = 0;
displayMask = 1 << 31;
for (i = 0; i < 32; i++) {
if ((value & displayMask) == 1) {
counter++;
}
value <<= 1;
}
if ((counter % 2) == 0) {
printf("The total number of 1's in the bit representation is even.\n");
}
else {
printf("The total number of 1's in the bit representation is odd.\n");
}
}
Des conseils ou des astuces sont très appréciés. Je vous remercie!
Si vous avez seulement d'imprimer pair/impair, vous ne même pas les compter, vous pouvez directement déterminer la (http [parité]: // stackoverflow .com/a/21618038/555045) – harold
Copie possible de [Comment vérifier si la valeur a une parité paire ou impaire?] (http://stackoverflow.com/questions/21617970/how-to-check-if-value -has-pair-parity-of-bits-or-impair) – harold
'int value' ==>' valeur non signée'. Le décalage d'un bit de 'int' dans le bit de signe est un comportement indéfini. –