Windows: Wie groß ist ein BOOL?
Wie groß (in bits) ist ein Windows - BOOL Daten geben?
Microsoft definiert die BOOL Datentyp als:
BOOL Boolean variable (should be TRUE or FALSE).
This type is declared in WinDef.h as follows:
typedef int BOOL;
Wandelt meine Frage in:
Wie groß (in bit) ist ein int Daten geben?
Edit: bevor K&R.
Edit 2: Etwas zum nachdenken
Vorgeben wir schaffen eine typisierte Programmiersprache und compiler. Sie haben einen Typ, der etwas darstellt, was logisch sein Wahr oder False. Wenn dein compiler können auch eine Verknüpfung zu Windows-DLLs, und die Sie anrufen möchten eine API, erfordert eine BOOL Datentyp, welcher Datentyp von deiner Sprache würdest du übergeben/zurückgeben?
Um interop mit Windows BOOL Datentyp Sie haben, um zu wissen, wie groß ein BOOL ist. Die Frage wird umgewandelt zu haben, wie groß eine int ist. Aber das ist ein C/C++ int, nicht die Integer Datentyp in unsere vorgeben Sprache.
Also muss ich entweder zu finden, oder erstellen Sie ein Daten-Typ, der die gleiche Größe wie ein int.
Hinweis: In meiner ursprünglichen Frage bin ich nicht erstellen einen compiler. ich rufe Sie Windows von einer Sprache, die nicht C/C++, also ich muss einen Datentyp, der die gleiche Größe wie das, was Windows erwartet.
- Es war eine Zeit, in der selbst-bytes wurden von der verwendeten Plattform ab und hielt zwischen 5 und 8 bits.
- Die frühen 36-bit-Maschinen hatte die 9-bit-bytes. Diejenigen, in denen die Tage. 12,5% mehr Speicher frei...
- Die Chromatische USWIRKUNGEN! DSP hat ein 9-bit-byte-nicht, weil es alt war (er lebte in den 1996-1998 Zeitrahmen), sondern weil es bequem war, zu tun, die MPEG-Kodierung mit 9-bit-Genauigkeit (durch Vermeidung des wrap-around-auf 8-bit subtrahiert). So ist es immer eine gute Idee, mit CHAR_BIT statt vorausgesetzt, es gibt 8 bits in einem byte.
- Und das Beispiel, das ich immer verwenden: die C55x Serie DSPs, die auf TI ' s OMAP-1-und OMAP-2-boards, haben eine 16-bit-byte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
int ist offiziell ein "integraler Typ, der größer als oder gleich der Größe der Typ short int ist, und kürzer als oder gleich der Größe des Typs long." Es kann beliebig groß sein und ist die Umsetzung-spezifisch.
Es ist 4 bytes (32 bits), Microsoft ' s aktuelle compiler-Implementierung (dies ist compiler-spezifisch, nicht Plattform-spezifisch). Sie sehen diese auf dem Grundlegende Typen (C++) Seite der MSDN-Website (in der Nähe der Unterseite).
es ist Plattform-abhängig, aber leicht zu finden:
In Bezug auf code, können Sie immer die Größe in bits jeglicher Art über:
Jedoch von einem semantische Sicht, die Anzahl der bits in einer BOOL sein soll eine. Das heißt, alle nicht-null-Werte von BOOL gleich behandelt werden sollten, einschließlich des Wertes der WAHR. FALSE (also 0) ist der einzige weitere Wert, der sollte einen definierten Bedeutung. Um diese Regel befolgen streng tatsächlich erfordert ein bisschen Gedanken. Zum Beispiel, aus ein BOOLESCHER Wert, der nach unten in einen char müssen Sie Folgendes tun:
(Wenn Sie gerade Stimmen direkt, dann Werte wie (1 << 8) würde interpretiert werden als FALSE statt TRUE.) Oder wenn Sie nur wollen, um zu vermeiden, die multi-Wert Themen insgesamt: über
Wenn Sie versuchen, verwenden Sie die verschiedenen Werte von BOOL zu einem anderen Zweck, Chancen sind, was Sie tun, ist entweder falsch oder zumindest zu etwas führen, wartbaren.
Sein, weil von diesen Komplikationen, die in der Sprache C++ tatsächlich Hinzugefügt, eine bonafide bool-Typ.
Kommt es auf die Umsetzung. (Sogar auf dem gleichen OS.) Verwenden
sizeof(int)
zu finden, die Größe von int auf die Umsetzung, die Sie gerade verwenden. Sie sollten nie mit hard-coding dieses in Ihrem C-Programm.Besser noch, verwenden Sie
sizeof(BOOL)
so dass Sie nicht haben, um sorgen machen, wenn MS jemals verändert Ihre definition von BOOL.Beide sind 32 bit groß (4 bytes).
In Sprachen, die einen einheitlichen Typ boolean booleans sind in der Regel 8-bit groß (1 byte), die nicht 1 bit, wie ich einst dachte.
Es ist so groß wie sizeof(int) sagt, es ist?
(In bytes, so multiplizieren Sie mit 8.)
Unter windows 7 x64 und C# 2010 sizeof(bool) gibt eine Antwort von 1 , in der Erwägung, dass sizeof(int) gibt eine Antwort von 4.
Daher die Antwort auf die Frage "wie groß in bits ist ein bool" ist 8, und es ist nicht das gleiche wie ein int.