Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » BOOL

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
15.05.2006, 22:26 Uhr
~MarkusT
Gast



Zitat von Guybrush Threepwood:
Aber da Windows ja schon sehr lange vor dem C99 Standard erschienen ist hat man sich halt mit dem typedef geholfen.


Das stimmt !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
15.05.2006, 22:36 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


in der WinAPI sind sowieso noch mehr Datentypen definiert, WORD, DWORD, usw, da diese sich ja rein theoretisch auch mal ändern KÖNNTEN, und so nur das "zeug" neukompiliert werden muss, nicht alles umgeschrieben. Das gleiche gilt ja auch für die *_t-Typen, strlen_t, pid_t usw, könnte ja sein das sich der typ mal ändert, und dann gibts keine Probleme wenn man diesen Typ nimmt.

(Auch wenn das wohl bei BOOL so gewesen ist das sie halt aus Faulheitsgründen einfach


C++:
#define TRUE 1
#define FALSE 0
typedef int BOOL;



gemacht haben und nicht irgendwas komplexeres


Zitat:

Das wird allerdings von C++ intern automatisch maskiert und kontrolliert


das macht imho auch nix anderes als 1 für true und 0 für false zu nehmen, da wird nix maskiert

0000 0000 -> 0 / false
0000 0001 -> 1 / true

Da musste nix maskieren

Da nun mal die kleinste Adressierbare Einheit bei unseren Rechnern 1 Byte entspricht (obwohl 1 Byte nicht umbedingt 8 Bit bedeutet, kann dir auch unterkommen das es nur 4 oder 7 oder sogar 16 Bit hat), hat man dies eben für den eigentlich 1bittigen Datentyp benutzt, WinAPI benutzt eben einen int, da dies dann irgendwo schon ne 2^n adresse erzeugt, wodurch zusätzliches alignment wegfällt. Kann dir z.b auch bei C++ dann vorkommen das du dann zwar bool schreibst (imho sizeof(bool) == 1?) und dann im entgültigen Programm die Variable trotzdem 4 byte belegt, 3 davon ungenutzt und ignoriert, da er eben z.b auf 4 byte/32bit aligned.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
15.05.2006, 23:43 Uhr
~MarkusT
Gast



Zitat von FloSoft:
in der WinAPI sind sowieso noch mehr Datentypen definiert, WORD, DWORD, usw, da diese sich ja rein theoretisch auch mal ändern KÖNNTEN, und so nur das "zeug" neukompiliert werden muss, nicht alles umgeschrieben. Das gleiche gilt ja auch für die *_t-Typen, strlen_t, pid_t usw, könnte ja sein das sich der typ mal ändert, und dann gibts keine Probleme wenn man diesen Typ nimmt.

(Auch wenn das wohl bei BOOL so gewesen ist das sie halt aus Faulheitsgründen einfach


C++:
#define TRUE 1
#define FALSE 0
typedef int BOOL;



gemacht haben und nicht irgendwas komplexeres


Ja das dürfte richtig sein. Wozu sollte man sich auch krampfhaft etwas abbrechen wollen wenn das auch auf einfach Weise sicher funktioniert .


Zitat von FloSoft:
das macht imho auch nix anderes als 1 für true und 0 für false zu nehmen, da wird nix maskiert

0000 0000 -> 0 / false
0000 0001 -> 1 / true

Da musste nix maskieren


Leider etwas ungeschickt ausgedrückt. Mir maskieren meinte ich den Speicher in einen definierten Zustand bringen um im Falle von TRUE oder FALSE dies effektiv zu setzen. Die Speicheradresse enthält ja zu Beginn einen undefinierten Wert -> & 0x8F usw. .


Zitat von FloSoft:
Da nun mal die kleinste Adressierbare Einheit bei unseren Rechnern 1 Byte entspricht (obwohl 1 Byte nicht umbedingt 8 Bit bedeutet, kann dir auch unterkommen das es nur 4 oder 7 oder sogar 16 Bit hat), hat man dies eben für den eigentlich 1bittigen Datentyp benutzt, WinAPI benutzt eben einen int, da dies dann irgendwo schon ne 2^n adresse erzeugt, wodurch zusätzliches alignment wegfällt. Kann dir z.b auch bei C++ dann vorkommen das du dann zwar bool schreibst (imho sizeof(bool) == 1?) und dann im entgültigen Programm die Variable trotzdem 4 byte belegt, 3 davon ungenutzt und ignoriert, da er eben z.b auf 4 byte/32bit aligned.


Jo, das schrieb ich bereits im Vorposting. Neu ist mir allerdings die Tatsache das 1 Byte auch mehr oder weniger als 8 BIT sein kann. Ist der Speicher tatsächlich so tolerant ausgelegt?

Gruß
Markus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
16.05.2006, 08:31 Uhr
ao

(Operator)



Zitat von ~MarkusT:
Neu ist mir allerdings die Tatsache das 1 Byte auch mehr oder weniger als 8 BIT sein kann. Ist der Speicher tatsächlich so tolerant ausgelegt?

Ist maschinenabhängig, es gibt CPUs, bei denen ein Byte nicht 8 Bit hat. Das ist dann aber auf dieser CPU immer so, du kannst dir nicht aussuchen, dein Windows heute mal im 33-Bit-Modus zu starten.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
16.05.2006, 09:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von ao:
Das ist dann aber auf dieser CPU immer so, du kannst dir nicht aussuchen, dein Windows heute mal im 33-Bit-Modus zu starten.


auch wenn man manchmal denkt das es im 16,5bit modus läuft


Zitat von ~MarkusT:

Leider etwas ungeschickt ausgedrückt. Mir maskieren meinte ich den Speicher in einen definierten Zustand bringen um im Falle von TRUE oder FALSE dies effektiv zu setzen. Die Speicheradresse enthält ja zu Beginn einen undefinierten Wert -> & 0x8F usw. .



Naja imho schreibt C ja vor das Variablen mit 0 vorinitialisiert werden, zumindest die "Load-Time-Variablen" die im Datensegment abgelegt werden, bei dynamisch alloziierten ist das natürlich nicht der Fall, da kann sonstwas drinstehen. Jedoch wird meist eh "0 ist false, true sonst" benutzt
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
16.05.2006, 16:45 Uhr
~MarkusT
Gast



Zitat von ao:
Ist maschinenabhängig, es gibt CPUs, bei denen ein Byte nicht 8 Bit hat. Das ist dann aber auf dieser CPU immer so, du kannst dir nicht aussuchen, dein Windows heute mal im 33-Bit-Modus zu starten.


Hmm, nach Angaben von einigen Quellen, siehe beispielsweise Wikipedia http://en.wikipedia.org/wiki/Byte gilt folgendes


Zitat:
A contiguous sequence of a fixed number of bits (binary digits). In recent years, the use of a byte to mean 8 bits is nearly ubiquitous.


Es ist sehr selten das bei einer Maschine 1 Byte nicht gleich 8 Bit ist. Dennoch sehr interessant zu wissen. Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
16.05.2006, 18:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ich hab hier z.b so mikrocontroller mit 7bit, bei dem ist ein byte auch 7 bit
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: