共找到2條詞條名為BOOL的結果 展開

BOOL

BOOL

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

兩者對比


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 之類的語句。
BOOL
BOOL
布爾型運算結果常用於條件語句,
if (邏輯表達式)
{
如果是 true 執行這裡;
}
else
{
如果是 false 執行這裡;
};
三、關於bool的小例子
(1)
#include
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!" <
return 0;
}
運行結果:OK!
(2)
#include
#include
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!" <
return 0;
}
運行結果:OK!
error!
若想更了解的話,讀者可以在定義b時改成 bool b=0;看看運行結果

C99新類型


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
#include
#include
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
#include
#include
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這兩個值。
  • 目錄