Ich versuche nur, die Bits einer ganzen Zahl auszudrucken, und es sieht so aus, als ob der int irgendwie verändert wird, aber es scheint auch dazwischenliegende Aufrufe zu ändern, nicht in der Mitte der Funktion. Meine Funktion ist:Bit-Verschiebung zu Druckbits, die einen Int in C ändern?
void printBits(int bits){
int i = 0;
printf("BEFORE: %u\n", bits);
while(i < 32){
printf("%d", 1 & (bits >> i));
i++;
}
printf("\n");
printf("AFTER: %u\n", bits);
}
In meinem Haupt, es ist hier aufgerufen und dann das Programm beendet (Primzahlen [0] wird nur die int verwendet wird):
printf("\nBEFORE PRINTBIT: %u\n", primes[0]);
printBits(primes[0]);
printBits(primes[0]);
printf("AFTER PRINTBITS: %u\n", primes[0]);
und der Ausgang ist:
BEFORE PRINTBITS: 3450182216
BEFORE: 3450182216
00010010010110011010010110110011
AFTER: 3450182216
BEFORE: 2900726784
00000000001010011010011100110101
AFTER: 2900726784
AFTER PRINTBITS: 2900726784
Zwischen den Aufrufen von printBits wird nichts aufgerufen, und soweit ich sagen kann, beeinflusst printBits den int nicht. Aber irgendwie verändert es sich. Irgendwelche Ideen, warum das passiert und wie ich es stoppen kann?
Ihre Schleife wird Bit 1 von "Bits" 32 mal drucken. Also verstehe ich nicht einmal, wie du diese Ausgabe bekommen kannst. –
Shifting * signed * Ganzzahlen wird immer sein ... * shifty * (Entschuldigung für das schlechte Wortspiel). Verwenden Sie stattdessen * unsigned * Ganzzahlen. –
Stellen Sie Code zur Verfügung, der das von Ihnen beschriebene Problem reproduziert - a [mcve]. Der Code, den Sie präsentieren, erzeugt weder die von Ihnen ausgegebene Ausgabe, noch weist er das von Ihnen beschriebene Problem auf. Wir schätzen es, wenn Sie es klein halten, aber ein * minimales * Beispiel ist wertlos, es sei denn es ist * vollständig * und * überprüfbar *. –