-
BOOL
鎖定
- 中文名
- 布爾
- 外文名
- BOOL
- 屬 性
- 布爾型變量
- 類 似
- float,double等
- 奠基人
- 喬治·布爾
- 關聯變量
- float,double
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
#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; }
(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;看看運行結果
BOOL新增類型
C99標準定義了一個新的關鍵字_Bool,提供了布爾類型。以前,C程序員總是使用自己的方法定義布爾類型。0表示false,非0表示true。可能使用char類型表示一個布爾類型,也可能使用int類型表示一個布爾類型。很多函數庫都定義了自己的布爾類型和相應的宏,枚舉,typedef。C99把C語言原生的布爾類型帶來了。C99中同時增添的關鍵字還有_Complex,_Imaginary等。
這個頭文件定義了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這兩個值。
- 參考資料
-
- 1. C99的新關鍵字_Bool .CNBLOG.2011-07-19[引用日期2013-07-17]