BOOL和bool
1、類型不同
bool為布爾型用作邏輯判斷
BOOL在typedef int BOOL;
在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
using namespace std;
int main()
{
bool b =1; //執行此行後,b=1(true)
if(b)
cout << "ok!" << endl;
b = b-1; //執行此行後,b=0(false)
if(b)
cout << "error!" <
return 0;
}
運行結果:OK!
(2)
#include
using namespace std;
int main()
{
bool b =1; //執行此行後,b=1(true)
if(b)
cout << "ok!" << endl;
這裡不用加吧
if(b)
cout << "error!" <
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等。
這個頭文件定義了bool,true,false等宏。
C2008草案中說:
“Anobject declared as type_Boolis large enough to store the values 0 and1.”
也就是說,隻規定了_Bool類型的大小是至少能夠存放0和1這兩個值。并沒有規定具體的大小。這交給編譯器自由發揮了。
用gcc(32位環境)做下面的測試:
#include
#include
#include
int main(void)
{
printf("sizeof(bool):%dn",sizeof(bool));
printf("sizeof(char):%dn",sizeof(char));
printf("sizeof(int):%dn",sizeof(int));
printf("sizeof(long):%dn",sizeof(long));
return EXIT_SUCCESS;
}
輸出結果:
sizeof(bool):1
sizeof(char):1
sizeof(int):4
sizeof(long):4
由此可見,gcc是用char來實現_Bool類型的。
看看給_Bool類型賦值會怎樣:
#include
#ihclude
#include
int main(void)
{
bool boolean=-11212112;
printf("boolean:%dn",boolean);
return EXIT_SUCCESS;
}
輸出結果:
boolean:1
看來,gcc編譯器對待_Bool類型有自己的轉換處理。如果是0賦值給_Bool類型,那麼就賦值0。如果是任意其他數據,那麼會賦值為1!(隻是不知道其他編譯器是否如此處理,C2008标準草案沒有細說這個部分)_Bool類型隻有0和1這兩個值!