布林 (資料型別)

布林－邏輯並不總是隻屬於布林型別的。在一些語言中，布林資料型別被定義為可代表多於兩個真值。例如，ISO SQL:1999標準定義了一個SQL布林型可以儲存三個可能的值：真、假、未知而非真。Ada.Ada在標準包中定義codice_1為一種列舉型別，有兩種值codice_2和codice_3，並且codice_2 &lt; codice_3。type Boolean is (False, True);p : Boolean := True;if p thenend if;相關的操作使用語所有的列舉型別，包括codice_1。布林運算codice_13, codice_14, codice_15和codice_16由codice_1及任意宣告的子型別定義。布林運算也適用於codice_1值陣列。Algol.Algol 60有codice_1資料型別和相關的操作，定義在Algol 60報告中。這在ALGOL 68中被簡化為codice_20。ALGOL 68語言詳細說明中關於布林操作定義的原文：10.2.2. 布林運算元的運算C.在C99之前，C語言的標準沒有提供布林型別，但是這不意味著C90不能表示布林值的概念。C中的所有布林運算都以非零值代表真，零值代表假。這樣，在其他型別如一個整數或一個列舉中儲存布林值就變得很平常。為了方便，常常為布林型別建立一個typedef來和一些已存在的資料型別相關聯。C99標準也提供了一個內建的布林型別。為了說明C中的布林型，注意以下C程式碼：if (my_variable) {printf("True!\n");} else {printf("False!\n");等價於：if (my_variable != 0) {printf("True!\n");} else {printf("False!\n");簡單來說這就是一個整數型別。由於C標準要求codice_21用在指標上下文中時要代表空指標，上面的概念也可以用來檢查一個指標是否為空，雖然一些程式風格不建議這樣用。這種情況同樣適用於浮點值，當比較它們的時候要特別小心，因為它們通常包含四捨五入的結果。通常，整型用來包含布林變數。雖然為了測試一個變數的真假值時沒必要來命名真或假，但是在給它們分配值的時候卻是需要的。其他方法，codice_22關鍵字允許在語言中根據你的選擇來命名元素，例如：typedef enum { FALSE, TRUE } boolean;boolean b;如下典型的預處理宏經常被使用。int f = FALSE;有時codice_23可能被定義為-1或~0。這意味著在現在常見的二補數計算機架構的整型中所有的位都被設定為1。但是，在C中任意非零值都代表真就帶來了問題，因為codice_23由一個特定的值來表示，因此在其他語言中codice_25只不過是多餘的，而在C中，就是錯誤的程式碼。C99.C99中有codice_20型別，取值為codice_27和codice_28，定義在codice_29標頭檔案中：bool b = false;b = true;C++.C++程式語言在其標準化過程中引入了codice_20、codice_27和codice_28關鍵字，增加了原生資料型別來支援布林資料，其大小被實現定義。 codice_20在1993年被引入。.1998年的C++標準庫定義了一個codice_34類別的特例。為了最佳化空間，其中的元素被打包，使得每一個布林變數只使用一位記憶體。這被認為是一個錯誤。codice_34不符合STL容器的需要。例如一個codice_36必須為codice_37型別的一個真值左值。這和codice_34的情況不同。類似地，codice_39在解除引用時不產生一個codice_40。在C++標準委員會和庫工作組之間有個共識，就是codice_34應該被反對或完全從下一個標準中被移除。C#.在C#中，布林變數透過保留字codice_20來識別，這個保留字是預定義結構型別codice_43的別名，佔一位元組。在codice_20和其他型別之間不存在標準的轉換。此語言還提供了一個布林型別codice_45，可以表示三種值：codice_27、codice_28和codice_48。這和SQL中布林表示式的用法類似。輸出一個布林型的程式碼如下：bool myBool = (i == 5);System.Console.WriteLine(myBool ? "I = 5" : "I != 5");Fortran.在Fortran被標準化之前，於1950年代引入了codice_49關鍵字和相關的操作codice_50、codice_51、codice_52等等。logical :: bool ! 宣告一個布林變數名稱為boolbool=.true. ! 將變數bool存入值.true.if (bool) then ! 由於條件為.true.所以進入內部執行print*,"bool=",bool ! 顯示 bool=Tbool=1==2 ! 1==2的運算結果是.false.，將.false.存入變數boolprint*,"bool=",bool ! 再次顯示，這時候變成 bool=Fend ifJava.在Java語言中，布林變數由原始型別codice_53表示。Java虛擬機器將實際在記憶體中的表現抽象，這樣JVM開發者可以使用盡可能方便的方式來代表布林量。Java語言規範不允許任何顯式或隱式的從codice_53的轉換。這樣就需要編譯器拒絕如下程式碼：int i = 1;if (i)System.out.println("i is not zero.");elseSystem.out.println("i is zero.");因為整型變數codice_55不能轉換為一個布林型並且codice_56語句需要一個codice_53條件。在Java中，codice_53值。JavaScript.JavaScript有兩個關鍵字，codice_27和codice_28，兩者都為小寫。JavaScript是一種弱型別的語言，沒有明確的布林資料型別供其變數使用。但是許多值用在邏輯上下文時可以被當成codice_28，包括零、空陣列和空物件，都被認為是codice_27。JavaScript 提供了一個codice_1 物件，可以被用作控制布林值的容包裝。var boolean = true; //設boolean為trueif(boolean &amp;&amp; 1){console.log("This is true."); //將會顯示這個，因為boolean是true和1亦是true}else{console.log("This is false.");但如果使用codice_1物件的話，它總是會被當成codice_27，儘管其包含codice_28值。var boolean = new Boolean(false); //設boolean為一個Boolean物件，並設定其內容為falseif(boolean){console.log("This is true."); //將會顯示這個，因為Boolean物件不是null}else{console.log("This is false.");若僅使用 codice_75 function，則視同將引數轉為布林值var boolean = Boolean(false); //等同於將 boolean 設為 falseif(boolean){console.log("This is true.");}else{console.log("This is false."); //將會顯示這個，因為 boolean 的值為 false由於JavaScript的歷史相容性和隱性型別轉換，空陣列，被形容為“JavaScript的三位一體”的迷因。λ演算.在λ演算計算模型中，布林型由Church數表示。Lisp.LISP有兩個特殊的符號codice_37和codice_83，分別代表了邏輯值真和假。但是，任意非codice_83值都由LISP系統翻譯成真。特殊的符號codice_83也用空列表codice_86表示。因此空列表為假，但是任何有資料的列表都為真。這樣，什麼都沒有為假，其他所有都為真。ML.和Ocaml類似，ML語言擁有codice_20型別，包含codice_27和codice_28值，例如：Objective-C.Objective-C提供了codice_90型別，以及宏codice_91和codice_92。由於Objective-C是C語言的超集，因此C語言的布林語義也適用。Swift.Swift的布林型別是 codice_93，主要用於 if 和 while 的條件判斷，值只能是真codice_27或假codice_28。let isSuccess = truelet isOpenDoor = falseOcaml.Ocaml 擁有一個 codice_20 值，為 codice_27 或 codice_28。- : bool = true和很多其它的語言一樣，Ocaml使用 codice_27 或 codice_28關鍵字來表示布林值。Pascal.codice_1是Pascal提供的基本資料型別，定義和用法如下：TypeBoolean = (False,True);varvalue: Boolean;value := True;value := False;if value thenbeginend;列舉外的值沒有被定義。某些編譯器實現為了介面目的擁有特殊的擴展布爾型別，並將其對映到C數值型別上，例如bytebool、wordbool、longbool等。