Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.08.2005, 12:00

Hexadezimal und Bitoperatoren

In vielen Spieleprogrammierbüchern sehe ich diese komischen Bit-Operatoren wie <<, >>, ~. Ich hab aber keine Ahnung, was die bringen.
Und was sollen diese Zahlen wie z.B. 0xffffffff? Kann man da nicht einfach ne "gewöhnliche" Zahl hinschreiben?
Mein Projekt: Rise of the Sylvan

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

10.08.2005, 12:10

<< und >> sind normalerweise stream-soperatoren. Die erleichtern einen ganz einfach das leben. ~ ist soweit ich weiß kein operator sondern für destruktoren.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

10.08.2005, 12:13

Zitat von »"Nox"«

<< und >> sind normalerweise stream-soperatoren.

Falsch, << und >> sind Bit-Shift-Operatoren.
Beim Streaming werden sie lediglich überladen.

<< verschiebt die Bits nach links, >> verschiebt sie nach rechts.

00100000 << 1 = 01000000
00100000 << 2 = 10000000
00100000 << 3 = 00000000 (die Bits kommen an der "anderen Seite" nicht wieder rein!)

11111111 >> 2 = 00111111
00110000 >> 4 = 00000011
usw.

Mit << und >> kann man auch Multiplikationen mit 2^n bzw. Divisionen durch 2^n sehr schnell berechnen.
Das gilt natürlich nur für Integer.

8 << 1 = 8 * 2
8 << 2 = 8 * 4
8 << 3 = 8 * 8
8 << 4 = 8 * 16

8 >> 1 = 8 / 2
8 >> 2 = 8 / 4
8 >> 3 = 8 / 8
usw.

Zitat von »"Nox"«

~ ist soweit ich weiß kein operator sondern für destruktoren.

~ ist auch ein Operator, und zwar die bitweise Umkehrung (Inversion).
Das heißt: aus 00110101 wird 11001010.

Zitat von »"Crash"«

Und was sollen diese Zahlen wie z.B. 0xffffffff? Kann man da nicht einfach ne "gewöhnliche" Zahl hinschreiben?

Also ich persönlich finde Zahlen wie 0xFFFFFFFF schöner als 16777215. Will man gezielt einzelne Bits ansprechen, dann geht das mit Hexadezimalzahlen einfacher/anschaulicher als mit Dezimalzahlen.
Sehr schön ist auch, dass man mit zwei Hexadezimalziffern immer genau ein Byte beschreibt.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

10.08.2005, 13:38

wieder was gelernt^^. "<< und >> sind normalerweise stream-operatoren" sollte ausdrücken "<< und >> werden häufig als stream-operatoren genutzt"
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

5

10.08.2005, 17:03

Danke für die Antwort, David :). Das hat mir schon sehr geholfen.
Wie rechnet man denn normale Zahlen in hexadezimale Zahlen um?
Mein Projekt: Rise of the Sylvan

6

10.08.2005, 17:07

~ = inversion?
ich dachte immer
! = inversion !

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

10.08.2005, 18:49

! ist logisches Komplement
~ ist bitweises Komplement

Siehe auch:
|| logisches Oder
| bitweises Oder
&& ...
& ...

Ich wundere mich nur, dass die "scheinbar Profis" das nicht kennen... ;)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

10.08.2005, 19:23

Sowas habe ich nie behauptet ;) außerdem kann man nicht alles wissen über c oder? ^_^

@crash naja wenn du z.b. int a = 0x00ffffff hast dann steht in a ne dezi-zahl.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

9

10.08.2005, 21:21

ich weiß zwar nich direkt was dein kommentar mir sagen will
aber jedenfalls: ne kannte ich bis dato nicht und da ich die inversion
immer nur mit bool'schen variablen/werten benutzt habe
hat ! immer gut funktioniert...wieder was gelernt ^^

Stefan

Alter Hase

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

10

10.08.2005, 22:08

wusste ich auch noch nicht, danke! Könnt ihr das bitte ins Faq verschieben, damit ich es wieder finde?


cya,
Stefan

Werbeanzeige