Bit löschen
-
Servus liebe Kollegen , ich habe Informatik Grundlagen im Studium und benötige eure Hilfe.
Zum Programm:
-Benutzer gibt Zahl 15 für x ein
-Benutzer gibt Zahl 2 für b ein
-Programm gibt diejenige Zahl aus, bei der das Bit an der Stelle b=2 von x=15 gelöscht ist.1 #include <stdio.h>
2
3 int main(void) {
4
5 long x;
6 long b;
7
8 printf("X eingebenn:");
9 scanf("%d", &x);
10
11 printf("B eingeben:");
12 scanf("%d", &b);
13
14 b=b-1;
15 x &= ~(1<<b);
16 printf("x=%d",x);
17 return 0;
18 }Nun mein Anliegen:
In Zeile 15 ist mir generell klar was dort passiert. Der Binärcode der Zahl 15 wird also von 0000 1111 auf 0000 1101 geändert und das Programm gibt somit die Dezimalzahl 13 aus. Soweit Richtig?!
Mein Dozent stellt mir die Frage: Was denn in Zeile 15 in der Klammer für eine Zahl herauskommt. Ist damit die 13 gemeint?
Danke im Voraus
-
Owo schrieb:
Mein Dozent stellt mir die Frage: Was denn in Zeile 15 in der Klammer für eine Zahl herauskommt. Ist damit die 13 gemeint?
Nein. Erklär doch mal, wie die Zeile 15 funktioniert. Dazu musst du auch erklären, was der Operator << macht. Und wenn du das weißt, dann weißt du auch, was in der Klammer heraus kommt.
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
-
x= x & ~ (1<<b)
x ist gleich 13 und nicht 1 an der stelle 2 im Binärcode ...
<< ist ja der Linkshift Operant und verschiebt den Inhalt der Variable bitweise nach links... aber iwie bin ich trotzdem
-
Mach mal ein paar konkrete Zahlenbeispiele:
Was sind: 1<<0? 1<<1? 1<<2? 1<<3? 1<<4? 1<<10?
Was sind diese Zahlen im Binärsystem?Fällt dir dann was auf?
-
ich glaube ich habs jetzt...
in meinem fall war ja das b=2
also 1<<2
die 1 hat den binärcode 0000 0001
mit jedem verschieben nach links verdoppelt sich dann die Dezimalzahl,d.h in meinem fall steht in der klammer die zahl 4?!
-
Quatsch
durch b=b-1 ist dann 2 die zahl die in der klammer steht oder?1
-
Genau. Und 2 in binär ist 0000 0010. Und jetzt verstehst du wohl auch, wieso die Zeile 15 bei b == 2 das 2. Bit löscht.
-
Ja!
Super vielen Dank. Manchmal geht's mit ner kleinen Anleitung einfach leichter wenn man ne Blockade hat
-
LOL. SeppJ kann einem manche Sachen drastisch aber einleuchtend erklären.