[gelöst]Frage zu BitShifting -> Unverständliche Ausgabe
-
Hi Leute,
ich habe folgenden Testcode:#include <stdio.h> int main () { char x=0010; printf("%i\n",x); x <<= 1; printf("%i\n",x); return 0; }
Als Ausgabe erhalte ich:
8 16
Worüber ich mich wundere
Ich dachte immer
`0010` = 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 2
und nach dem BitShifting
um 1 nach links müssten es doch 4 sein...
`0100` = 0*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = 4Wo ist mein Denkfehler/Rechenfehler
bräuchte mal Hilfe.MfG Jonas
-
Eine Zahl die mit 0 beginnt, wird in C als oktal interpretiert, wodurch 0010 dezimal 8 ist. Ein Linksshift ergibt natürlich 16. Lieber hexal:
0x10
-
Alles klar!
Danke aber was ich wollte
war nicht 0x10 sondern 0x2MfG Jonas
-
Oh, stimmt... Aber warum nicht einfach gleich
2
?
-
Weil ich folgendes vorhabe:
(Ist nur ein Beispiel)Eine Menge {A,B,C} durch
Matritzen darstellen z.B.1 0 0
1 0 0 = AAA
1 0 01 0 0
1 0 0 = AAB
0 1 0usw.
Und da ist mir aufgefallen,
dass es von 100 zu 010 einfach
um ein Bit nach rechts geshifted
wird, dass will ich für Permutation/
Kombination benutzen.MfG Jonas
-
Dann bringt dir
0x2
doch aber auch nicht viel mehr als2
? Binärzahlen kannst du in C nicht einfach darstellen.
-
Ja das stimmt aber ich habe eben eine
gedankliche Lösung gefunden (hoffe ich :D)...MfG Jonas