Hallo,
ich würde gerne nur das erste Bit einer int-Zahl setzen bzw. löschen. Wie kann man da vorgehen? Danke im Voraus!
Hallo,
ich würde gerne nur das erste Bit einer int-Zahl setzen bzw. löschen. Wie kann man da vorgehen? Danke im Voraus!
zum Löschen machst "x & 0x7FFFFFFF", zum Setzen machst "x | 0x80000000"
Die Frage ist eigentlich noch, welches ist das ERSTE Bit? +gg+
Hm, stimmt eigentlich. Wenn ichs mir hier so textuell reinlesen tu, is es das MSB, aber eigentlich passt "ERSTE" besser aufs LSB.
Die Fragestellung ist halt nicht eindeutig, aber ich denke mal, er wird deine Lösung gesucht haben.
LG
Hallo,
vielen Dank erstmal für die Hilfe. Es funktioniert soweit. Leider verstehe ich nicht, wie man von der Position des Bits zur Hex-Darstellung kommt. Welche Hex-Zahl steht hinter dem zweiten, dritten,... Bit?
Einfach Bin in Hex umrechnen. Brauchst eh nur den 4er Block umrechnen, in dem das Bit drin ist, die andern sind eh klar.
Ein Integer hat 32 Bit.
z.B.:
11110000111100001111000011110000
Das wär Binär. In Hex kannst immer vier binärziffern zusammenziehen zu einer Hexadezimalziffer:
F0F0F0F0
das 0x heißt nur, dass es Hexadezimal ist. Wennst jetzt oben schaust:
0x7FFFFFFF = 7FFFFFFF
7 = 0111
F = 1111
=> 7FFFFFFF = 0111 1111 1111 1111 1111 1111 1111 1111
Das ist die Maske. Wenn du jetzt deine Zahl bitweise mit der Zahl verUNDest, dann hast:
0111 1111 1111 1111 1111 1111 1111 1111 &
1111 0000 1111 0000 1111 0000 1111 0000 =
-----------------------------------------------------
0111 0000 1111 0000 1111 0000 1111 0000
Somit hast das MSB gelöscht.. alles klar?
Eine Hex besteht aus 4 Bit ... demnach sind 2 Hexzahlen 8 bit lang.
Int als Datentyp ist zumeist 32 bit lang. Logischerweise werden daher 8 Hexzahlen benötigt. Hoffe das ist soweit verständlich genug, dass du dir den letzten Reim noch selbst bilden kannst
Zitat von woodLeider verstehe ich nicht, wie man von der Position des Bits zur Hex-Darstellung kommt. Welche Hex-Zahl steht hinter dem zweiten, dritten,... Bit?
Man braucht auch nicht wirklich die Hexdarstellung, mit Hilfe von left shifts kommt man auch zum gewünschten Ergebnis:
1 << 0 = 1 = 0x1
1 << 1 = 2 = 0x2
1 << 2 = 4 = 0x4
1 << 3 = 8 = 0x8
1 << 4 = 16 = 0x10
1 << 5 = 32 = 0x20
usw.
Setzen des 6. bits wär also x |= (1 << 6);
Löschen des 6. bits: x &= ~(1 << 6);
da man mit Hilfe von ~ die einzelnen bits negiert.
Vielen Dank, habe es jetzt verstanden!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!