布林是計算機科學中的邏輯資料型別，以發明布林代數的數學家喬治布 爾為名。它是隻有兩種值的原始型別，通常是真和假。布林資料型別主要與條件語句相關聯，條件語句透過根據開發人員指定的條件式，更改程式控制流來允許評估語句的運算值為真或假（即條件成立或不成立）。這是一種更廣泛的邏輯資料型別的特殊情況（參見機率邏輯）－邏輯並不總是隻屬於布林型別的。 在一些語言中，布林資料型別被定義為可代表多於兩個真值。例如，ISO SQL1999 標準定義了一個 SQL 布林型可以儲存三個可能的值：真、假、未知（SQL null 被當作未知真值來處理，但僅僅在布林型中使用）。在此情況下，未知先於真及假，因為布林型一開始是未有實際值，其值是 unknown（也有機會是隨機值）而非真。 Ada Ada 在標準包中定義 Boolean 為一種列舉型別，有兩種值 False 和 True，並且 False True。 type Boolean is False True p Boolean True if p then end if 相關的操作使用語所有的列舉型別，包括 Boolean。布林運算 and or xor 和 not 由 Boolean 及任意宣告的子型別定義。布林運算也適用於 Boolean 值陣列。 Algol Algol 60 有 Boolean 資料型別和相關的操作，定義在 Algol 60 報告中。這在 ALGOL 68 中被簡化為 bool。 ALGOL 68 語言詳細說明（177 頁）中關於布林操作定義的原文： 1022 布林運算元的運算 op bool a b boola true b op bool a b bool a b false op bool a bool a false true op bool a b boolab ba op bool a b bool ab op abs bool a int a 1 0 C 在 C99 之前，C 語言的標準沒有提供布林型別，但是這不意味著 C90 不能表示布林值的概念。C 中的所有布林運算以及條件宣告（if while）都以非零值代表真，零值代表假。這樣，在其他型別如一個整數或一個列舉中儲存布林值就變得很平常。為了方便，常常為布林型別建立一個 typedef 來和一些已存在的資料型別相關聯。C99 標準也提供了一個內建的布林型別。 為了說明 C 中的布林型，注意以下 C 程式碼： if my_variable printf Truen else printf Falsen 等價於： if my_variable 0 printf Truen else printf Falsen 簡單來說這就是一個整數型別。由於 C 標準要求 0 用在指標上下文中時要代表空指標，上面的概念也可以用來檢查一個指標是否為空，雖然一些程式風格不建議這樣用。這種情況同樣適用於浮點值，當比較它們的時候要特別小心，因為它們通常包含四捨五入的結果。通常，整型用來包含布林變數。 雖然為了測試一個變數的真假值時沒必要來命名真或假，但是在給它們分配值的時候卻是需要的。（一種方法是使用零值和一，這樣做的好處是語言獨立。）其他方法，enum 關鍵字允許在語言中根據你的選擇來命名元素，例如： typedef enum FALSE TRUE boolean boolean b 如下典型的預處理宏經常被使用。 define FALSE 0 define TRUE 1 int f FALSE 有時 TRUE 可能被定義為 1 或～0（位運算 0 的補）。這意味著在現在常見的二補數計算機架構的整型中所有的位都被設定為 1。 但是，在 C 中任意非零值都代表真就帶來了問題，因為 TRUE 由一個特定的值來表示，因此在其他語言中 if foo TRUE 只不過是多餘的，而在 C 中，就是錯誤的程式碼。 C99 C99 中有 bool 型別，取值為 true 和 false，定義在 stdboolh 標頭檔案中： include stdboolh bool b false b true C C 程式語言在其標準化過程中引入了 bool、true 和 false 關鍵字，增加了原生資料型別來支援布林資料，其大小被實現定義。 bool 在 1993 年被引入。 1998 年的 C 標準庫定義了一個 vectorboolzhcn 類；zhtw 類別； 的特例。為了最佳化空間，其中的元素被打包，使得每一個布林變數只使用一位記憶體。這被認為是一個錯誤。vectorbool 不符合 STL 容器的需要。例如一個 containerTreference 必須為 T 型別的一個真值左值。這和 vectorbool 的情況不同。類似地，vectorbooliterator 在解除引用時不產生一個 bool。在 C 標準委員會和庫工作組之間有個共識，就是 vectorbool 應該被反對或完全從下一個標準中被移除。 C 在 C 中，布林變數透過保留字 bool 來識別，這個保留字是預定義結構型別 SystemBoolean 的別名，佔一位元組。在 bool 和其他型別之間不存在標準的轉換。此語言還提供了一個布林型別 DBbool，可以表示三種值：true、false 和 null。這和 SQL 中布林表示式的用法類似。 輸出一個布林型的程式碼如下： bool myBool i 5 SystemConsoleWriteLine myBool I 5 I 5 Fortran 在 Fortran 被標準化之前，於 1950 年代引入了 LOGICAL 關鍵字和相關的操作NOT、AND、OR 等等。 logical bool 宣告一個布林變數名稱為 bool booltrue 將變數 bool 存入值true if bool then 由於條件為true 所以進入內部執行 printboolbool 顯示 boolT bool12 12 的運算結果是false，將false 存入變數 bool printboolbool 再次顯示，這時候變成 boolF end if Java 在 Java 語言中，布林變數由原始型別 boolean 表示。Java 虛擬機器將實際在記憶體中的表現抽象，這樣 JVM 開發者可以使用盡可能方便的方式來代表布林量（例如，一個位元組或者一個字）。 Java 語言規範不允許任何顯式或隱式的從 boolean 的轉換。這樣就需要編譯器拒絕如下程式碼： int i 1 if i Systemoutprintln i is not zero else Systemoutprintln i is zero 因為整型變數 i 不能轉換為一個布林型並且 if 語句需要一個 boolean 條件。 在 Java 中，boolean 值（和其他原始型別相同）可以被附加到字串。這個特性提供了一個預設的布林型的視覺化表現（true 被顯示為 true，false 被顯示為 false）。 JavaScript JavaScript 有兩個關鍵字，true 和 false，兩者都為小寫。JavaScript 是一種弱型別的語言，沒有明確的布林資料型別供其變數使用。但是許多值用在邏輯上下文時可以被當成 false，包括零（0）、null、零長度字串、NaN 以及 undefined。所有其他變數值，包括一（1）、空陣列和空物件，都被認為是 true。JavaScript 提供了一個 Boolean 物件，可以被用作控制布林值的容包裝。 var boolean true 設 boolean 為 true if boolean 1consolelog This is true 將會顯示這個，因為 boolean 是 true 和 1 亦是 true else consolelog This is false 但如果使用 Boolean 物件的話，它總是會被當成 true，儘管其包含 false 值。 var boolean new Boolean false 設 boolean 為一個 Boolean 物件，並設定其內容為 false if booleanconsolelog This is true 將會顯示這個，因為 Boolean 物件不是 null else consolelog This is false 若僅使用 Boolean function，則視同將引數轉為布林值 var boolean Boolean false 等同於將 boolean 設為 false if booleanconsolelog This is true else consolelog This is false 將會顯示這個，因為 boolean 的值為 false 由於 JavaScript 的歷史相容性和隱性型別轉換，空陣列、字元 0 的字串（0）、水平製表字元的字串（t）互為不寬鬆等同，但都寬鬆等同於數字 0（0），被形容為 JavaScript 的三位一體 的迷因。 λ 演算 在 λ 演算計算模型中，布林型由 Church 數表示。 Lisp LISP 有兩個特殊的符號 T 和 NIL，分別代表了邏輯值真和假。但是，任意非 NIL 值都由 LISP 系統翻譯成真。特殊的符號 NIL 也用空列表 表示。因此空列表為假，但是任何有資料的列表都為真。這樣，什麼都沒有為假，其他所有都為真。 ML 和 Ocaml 類似，ML 語言擁有 bool 型別，包含 true 和 false 值，例如： fun isittrue x if x then YES else NO val isittrue fn bool string isittrue true val it YES string isittrue false val it NO string isittrue 88 val it YES string isittrue 75 val it NO string ObjectiveC ObjectiveC 提供了 BOOL 型別，以及宏 YES 和 NO。由於 ObjectiveC 是 C 語言的超集，因此 C 語言的布林語義也適用。 Ocaml Ocaml 擁有一個 bool 值，為 true 或 false。 1 1 bool true 和很多其它的語言一樣，Ocaml 使用 true 或 false 關鍵字來表示布林值。 Pascal Boolean 是 Pascal 提供的基本資料型別，定義和用法如下： 系統或標準宣告 Type Boolean FalseTrue 用法 var value Boolean value True value False if value then begin end Python Swift Swift 的布林型別是 Bool，主要用於 if 和 while 的條件判斷，值只能是真 true 或假 false。 let isSuccess true let isOpenDoor false 列舉外的值沒有被定義。某些編譯器實現（如 Delphi）為了介面目的擁有特殊的擴展布爾型別，並將其對映到 C 數值型別上，例如 bytebool、wordbool、longbool 等。 參考文獻 Category 資料型別