BOOL和bool
1、類型不同
bool為布爾型用作邏輯判斷
BOOL在<windef.h>typedef int BOOL;
在<wtypes.h>typedef long BOOL;
2、長度不同
bool只有一個位元組
BOOL長度視實際環境來定,一般可認為是4個位元組
3、取值不同
bool取值false和true,0為false,非0為true。(例如-1和2都是true)。
如果數個bool對象列在一起,可能會各占一個Byte,這取決於編譯器。
BOOL是微軟定義的typedef int BOOL(在windef.h中),0為FALSE,1為TRUE。(-1和2既不是TRUE也不是FALSE)。
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
布爾型變數bool
布爾型變數的值只有 真 (true) 和假 (false)。
布爾型變數可用於邏輯表達式,也就是“或”“與”“非”之類的邏輯運算和大於小於之類的關係運算,邏輯表達式運算結果為真或為假。
bool可用於定義函式類型為布爾型,函數裡可以有 return TRUE; return FALSE 之類的語句。
布爾型運算結果常用於條件語句,
if (邏輯表達式)
{
如果是 true 執行這裡;
}
else
{
如果是 false 執行這裡;
};
三、關於bool的小例子
(1)
#include<iostream>
using namespace std;
int main()
{
bool b =2; //執行此行後,b=true(整型2轉為bool型後結果為true)
if(b)
cout << "ok!" << endl;
b = b-1; //執行此行後,b=false(bool型數據true參與算術運算時會轉為int值1,減1後結果為0,賦值給b時會轉換為bool值false)
if(b)
cout << "error!" <<endl;
return 0;
}
運行結果:OK!
(2)
#include<iostream>
#include<windef.h>
using namespace std;
int main()
{
BOOL b =2; //執行此行後,b=2(BOOL為int此處不進行類型轉換,b存放的就是2)。
if(b)
cout << "ok!" << endl;
b=b-1; //執行此行後,b=1(只是簡單的進行算術運算,結果為1,回存)
if(b) // b非0,條件為真
cout << "error!" <<endl;
return 0;
}
運行結果:OK!
error!
若想更了解的話,讀者可以在定義b時改成 bool b=0;看看運行結果
C99新增類型 _Bool
C99標準定義了一個新的關鍵字_Bool,提供了布爾類型。以前,C程式設計師總是使用自己的方法定義布爾類型。0表示false,非0表示true。可能使用char類型表示一個布爾類型,也可能使用int類型表示一個布爾類型。很多函式館都定義了自己的布爾類型和相應的宏,枚舉,typedef。C99把C語言原生的布爾類型帶來了。C99中同時增添的關鍵字還有_Complex,_Imaginary等。
<stdbool.h>
這個頭檔案定義了bool,true,false等宏。
C2008草案中說:
“An object declared as type_Boolis large enough to store the values 0 and1.”
也就是說,只規定了_Bool類型的大小是至少能夠存放0和1這兩個值。並沒有規定具體的大小。這交給編譯器自由發揮了。
用gcc(32位環境)做下面的測試:
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int main(void)
{
printf("sizeof(bool):%d\n",sizeof(bool));
printf("sizeof(char):%d\n",sizeof(char));
printf("sizeof(int):%d\n",sizeof(int));
printf("sizeof(long):%d\n",sizeof(long));
return EXIT_SUCCESS;
}
輸出結果:
sizeof(bool):1
sizeof(char):1
sizeof(int):4
sizeof(long):4
由此可見,gcc是用char來實現_Bool類型的。
看看給_Bool類型賦值會怎樣:
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int main(void)
{
bool boolean=-11212112;
printf("boolean:%d\n",boolean);
return EXIT_SUCCESS;
}
輸出結果:
boolean:1
可以看到,gcc編譯器對待_Bool類型有自己的轉換處理。如果是0賦值給_Bool類型,那么就賦值0。如果是任意其他數據,那么會賦值為1。(只是不知道其他編譯器是否如此處理,C2008標準草案沒有細說這個部分)
_Bool類型只有0和1這兩個值。