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

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

1

03.06.2012, 15:36

Die Frage des richtigen Datentyps

EDIT by dot: Abgetrennt von hier


byte statt unsigned int für Alter (über den hier könnte man streiten)

Das würd ich nicht machen. Wenn dann vielleicht einfach nur int. Ich seh zumindest keinen Grund was Anderes zu verwenden ;)

int? Das Alter _kann_ also negativ werden? Und man kann über 4 Milliarden Jahre alt werden? ;)
Ehrlich, wieso int und kein (u)byte?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (04.06.2012, 18:22)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

03.06.2012, 15:55

byte statt unsigned int für Alter (über den hier könnte man streiten)

Das würd ich nicht machen. Wenn dann vielleicht einfach nur int. Ich seh zumindest keinen Grund was Anderes zu verwenden ;)

int? Das Alter _kann_ also negativ werden? Und man kann über 4 Milliarden Jahre alt werden? ;)
Ehrlich, wieso int und kein (u)byte?

int weil int per Definition der native Datentyp der jeweiligen Architektur ist. Was anderes verwendet man nur, wenn man ganz bestimmte Gründe hat.

Zitat von »ISO C++ Standard«

Plain ints have the natural size suggested by the architecture of the execution environment; the other signed integer types are provided to meet special needs.


Und ich seh keinen Grund weswegen das Alter ein unsigned char sein müsste. Wenn man ausdrücken will, dass eine Altersangabe einen ganz bestimmten Wertebereich hat, dann sollte man einen entsprechenden Typ definieren. Dann kann man derlei Dinge z.B. auch im Debug Build per assert() verifizieren, während im Release Build alles maximal effizient läuft.

unsigned ist imo jedenfalls kein brauchbarer Weg um auszudrücken dass ein Wert nur positiv sein kann. Nichts hindert mich daran, einem unsigned int negative Werte zuzuweisen, es ist wohldefiniert was dabei rauskommt. unsigned verwendet man, wenn man den verschobenen Wertebereich und/oder das spezifische Verhalten (welches sich von signed unterscheidet) benötigt.

Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von »dot« (03.06.2012, 16:30)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

03.06.2012, 16:49

Wie ich schon sagte, darüber kann man sich streiten.

@Checkmateing:
Ein Geschlecht bool zu machen halte ich für ausgemachten Unfug. Ja, selbst wenn die Enum nur 2 Werte hat, genau dafür ist eine Enumeration da. Klar, man kann sowas mit guter Dokumentation versehen. Es bleibt aber Code-Smell, weil es nicht selbsterklärend ist.
if ( getGender() ) { cout << "Yes, it has a gender... or you seriously wanted to know if it's male or female?"; }
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

03.06.2012, 16:54

Wenn ich etwas schreibe, dann versuche ich möglichst den passenden Datentyp zu wählen. Wozu ein int, wenn ein ubyte besser passt? Wozu bei Koordinaten ein int wenn ein short mehr als ausreicht?
Aber wie BlueCobold schon sagt, darüber lässt sich streiten. Belassen wir's dabei.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

5

03.06.2012, 17:31

Man verdammt, ich dachte Gleichheit ist transitiv?

Das was du da andeutest, sieht aber eher nach symmetrisch aus ;-)

Wenn ich etwas schreibe, dann versuche ich möglichst den passenden Datentyp zu wählen. Wozu ein int, wenn ein ubyte besser passt? Wozu bei Koordinaten ein int wenn ein short mehr als ausreicht?

Gehts du da nicht von Optimierungen aus, die vermutlich gar nicht stattfinden? Prinzipiell ist die Größe vollkommen egal, solange alle Werte rein passen, die man benutzen möchte. Wenn du 2 2-Byte-große shorts hast, die aber wegen Zugriffszeiten trotzdem auf 4 Byte ausgerichtet werden und der Prozessor intern ein short genauso in einem Takt verarbeitet, wie einen int, hat man ziemlich genau gar nichts gewonnen. Man hat nur möglicherweise für 5 verschiedene Variablen 3 verschiedene Typen benutzt, obwohl es keinen Unterschied machen würde, wenn man immer den selben nehmen würde, was dann wiederum übersichtlicher wäre.
Klar, wenn man Binärdateien oder so benutzt wird kann es wichtig sein. Aber Dinge komplizierter zu machen, weil man auf Optimierungen hofft, die gar nicht stattfinden ist halt irgendwie fragwürdig.
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

03.06.2012, 17:37

Wenn ich etwas schreibe, dann versuche ich möglichst den passenden Datentyp zu wählen. Wozu ein int, wenn ein ubyte besser passt? Wozu bei Koordinaten ein int wenn ein short mehr als ausreicht?

Gehts du da nicht von Optimierungen aus, die vermutlich gar nicht stattfinden?

In der Regel wäre das wohl sogar das Gegenteil einer Optimierung...

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

7

03.06.2012, 18:15

Nein, das hat nichts mit irgendeiner Optimierung zu tun.
Aber wozu gibt es denn byte, short etc. wenn man eh nicht darauf achtet und wegen jeder Kleinigkeit direkt int nimmt? Ich hab es jedenfalls von Anfang an so gehandhabt und werde es auch weiterhin so handhaben. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

S4My

unregistriert

8

04.06.2012, 14:13

Aber wozu gibt es denn byte, short etc. wenn man eh nicht darauf achtet und wegen jeder Kleinigkeit direkt int nimmt? Ich hab es jedenfalls von Anfang an so gehandhabt und werde es auch weiterhin so handhaben.
Ein wahres Wort gelassen ausgesprochen :D . Ich bin jetzt nicht unbedingt das größte Programmiergenie, jedoch denke ich das es schon einen guten Grund für die Nutzung der short-Variable gibt. Ich wäre ja auch selten blöd würde ich mir eine Villa mit 5 Toiletten kaufen ungeachtet der Tatsache, dass ich alleine lebe. Was macht es dann für einen Sinn Variablen, von denen man weiß, das sie beispielsweise 200 nicht überschreiten die Möglichkeit zu geben 4 Millionen als Wert anzunehmen. Wie gesagt, ich bin nicht sehr erfahren, aber wenn mich nicht alles täuscht so werden doch häufig typedef´s genutzt um integrale Variablen welche den Typ short haben sollen einfacher zu definieren, wie etwa:

C-/C++-Quelltext

1
typedef unsigned short Uint16

Hilfreich wäre das ja auch würde man das Programm auf Rechnern mit 32-bit anstelle 64-bit ausführen, da int an sich je nach Rechner unterschiedlich groß sein kann und man so Fehler vorbeugen könnte.

Jetzt würde ich noch gerne meinen sowieso überflüssigen Senf zum Thema enum abgeben. An sich muss man zugeben, die Idee mit bool ist zwar etwas komisch, macht aber auch auf den ersten Blick doch ein wenig Sinn, da man 2 Zustände, männlich oder weiblich, darstellen möchte. Wenn man dann jedoch enum nutzt, so sollte man meiner Meinung nach, der Sicherheit halber, noch einen weiteren einbauen: UNKNOWN. Bool kann ja bekannterweise mitteilen ob eine Aussage wahr oder falsch ist, somit müsste man hier eigentlich von einem Standard ausgehen, wie ja auch getan. Allerdings ist die bool Variable dann völlig überfordert sollte einmal keine Angabe gemacht worden sein. Hier im Forum gibt es ja auch nicht nur die Optionen Mann oder Frau, sondern auch Nicht angegeben, oder wie auch immer sie heißt...Auf alle Fälle ein kleiner Denkanstoß, wenn auch nicht nötig, zum Thema Default-Werte. Eine nette Sache durch die man nicht auf die Angabe eines Wertes angewiesen ist ^^ .

lg und ich hoffe ich hab mich nicht völlig zum Idioten gemacht
S4My :D

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

9

04.06.2012, 15:49

Zitat

4 Millionen

4 Milliarden um etwas genauer zu sein.
Auf 64Bit sogar bis zu 18 Trilliaden.

Bezüglich Enum:
Es natürlich besserer Stil mit Enum.
Zb. deswegen, da es in einem Spiel vielleicht auch Lebewesen geben könnte die keins von beiden sind.

Wenn man ein Bool verwenden will, sollte man die Funktion wenigstens in "IsMen"(oder andersrum) umbennenen damit es selbsterklärend bleibt.

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

10

04.06.2012, 16:12

Zitat

4 Millionen

4 Milliarden um etwas genauer zu sein.
Auf 64Bit sogar bis zu 18 Trilliaden.

Trillionen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige