BOOL

BOOL

bool表示布爾型變數,也就是邏輯型變數的定義符,以英國數學家、布爾代數的奠基人喬治·布爾(George Boole)命名。bool類似於float,double等,只不過float定義浮點型,double定義雙精度浮點型。 在objective-c中提供了相似的類型BOOL,它具有YES值和NO值;在java中則對應於boolean類型。

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這兩個值。

相關詞條

相關搜尋

熱門詞條

聯絡我們