2016-03-04 4 views
0

Donc, voici mon code: http://pastebin.com/MejYmpvKimpression BitSet en C

J'essaie d'obtenir la sortie pour afficher ceci:

The BitSet is: 
0000000001001010 

Modified BitSet at index '14' = '1' is: 
0010000001001010 

The value at index '14' is: 
1 

Modified Bitset at index '14' = '0' is: 
0000000001001010 

The value at index '14' is: 
0 

Cependant, il me donne cette sortie à la place:

The BitSet is: 
0000000001001010 

Modified BitSet at index '14' = '1' is: 
0010000001001010 

The value at index '14' is: 
0 

Modified Bitset at index '14' = '0' is: 
0000000001001010 

The value at index '14' is: 
0 

Tout fonctionne parfaitement à l'exception de la méthode d'affichage. Je ne sais pas ce qui se passe ici (tout le code est dans le lien pastebin ci-dessus):

/* Returns the value of the bit at 'index' */ 
int bitValue(bitSet bs, int index){ 

    /* Shifts right to the passed index value */ 
    int value = ((bs & (int)pow(power, index)) >> index); 

    return value; 
} 
+3

Bienvenue dans Stack Overflow! Il semble que vous deviez apprendre à utiliser un débogueur pour parcourir votre code. Avec un bon débogueur, vous pouvez exécuter votre programme ligne par ligne et voir où il dévie de ce que vous attendez. C'est un outil essentiel si vous voulez faire de la programmation. Pour en savoir plus: [Comment déboguer de petits programmes] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –

+0

Il semble que ce que vous attendez à l'index 14 soit en réalité à l'index 13 (l'indexation commence à 0). Voir https://en.wikipedia.org/wiki/Off-by-one_error – martinkunev

+0

Vous avez oublié de mettre à jour 'value' après avoir réglé le bit 14, donc bien sûr, il a imprimé l'ancienne valeur. Vous devez appeler 'bitValue' à nouveau pour obtenir la nouvelle valeur. Votre variable locale 'value' ne changera pas par elle-même par magie, n'est-ce pas? –

Répondre

0

Votre fonction principale est pas mise à jour de la valeur après avoir défini le bit. Essaye ça;

int main() { 
    bitSet bits = makeBitSet(); 
    int value = bitValue(bits, 14); 

    printf("The BitSet is: \n"); 
    displayBitSet(bits); 
    printf("\n\nModified BitSet at index '14' = '1' is: \n"); 
    setBit(&bits, 14); 
    displayBitSet(bits); 
    printf("\n\nThe value at index '14' is: \n"); 
    value = bitValue(bits, 14); 
    printf("%d", value); 
    printf("\n\nModified BitSet at index '14' = '0' is: \n"); 
    clearBit(&bits, 14); 
    displayBitSet(bits); 
    printf("\n\nThe value at index '14' is: \n"); 
    value = bitValue(bits, 14); 
    printf("%d\n", value); 

    return (0); 
} 
+0

Merci! Je n'ai même pas réalisé ça. Quelle petite erreur stupide. – Team42