「」至此。关于其他用法，请见「**布尔**」。
**布林**（英語：）是计算机科学中的逻辑数据类型，以發明布林代數的數學家喬治·布爾為名。它是只有两种值的原始類型，通常是真和假。布爾數據類型主要與條件語句相關聯，條件語句通過根據開發人員指定的條件式，更改程序控制流來允許評估語句的運算值為真或假（即條件成立或不成立)）。這是一種更廣泛的邏輯數據類型的特殊情況（參見概率邏輯）－邏輯並不總是只屬於布爾類型的。

在一些语言中，布尔数据类型被定义为可代表多于两个真值。例如，ISO SQL:1999标准定义了一个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页）中关于布尔操作定义的原文：

10.2.2. 布尔操作数的运算

1. **op** ? = (**bool** a, b) **bool**:( a | **true** | b );
2. **op** ? = (**bool** a, b) **bool**: ( a | b | **false** );
3. **op** ? = (**bool** a) **bool**: ( a | **false** | **true** );
4. **op** = = (**bool** a, b) **bool**:( a?b ) ? ( ?b??a );
5. **op** ≠ = (**bool** a, b) **bool**: ?(a=b);
6. **op** **abs** = (**bool** a)**int**: ( a | 1 | 0 );

C
-

在C99之前，C语言的标准没有提供布尔类型，但是这不意味着C90不能表示布尔值的概念。C中的所有布尔运算（&&, ||）以及条件声明（if, while）都以非零值代表**真**，零值代表**假**。这样，在其他类型如一个整数或一个枚举中保存布尔值就变得很平常。为了方便，常常为布尔类型创建一个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标准要求`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`，定义在`<stdbool.h>`头文件中：

```
#include <stdbool.h>
bool b = false;
...
b = true;

```

C++
---

C++编程语言在其标准化过程中引入了`bool`、`true`和`false`关键字，增加了原生数据类型来支持布尔数据，其大小被实现定义。 `bool`在1993年被引入。.

1998年的C++标准库定义了一个`vector<bool>`的特例。为了优化空间，其中的元素被打包，使得每一个布尔变量只使用一位内存。这被认为是一个错误。`vector<bool>`不符合STL容器的需要。例如一个`container<T>::reference`必须为`T`类型的一个真值左值。这和`vector<bool>`的情况不同。类似地，`vector<bool>::iterator`在解除引用时不产生一个`bool&`。在C++标准委员会和库工作组之间有个共识，就是`vector<bool>`应该被反对或完全从下一个标准中被移除。

C#
--

在C#中，布尔变量通过保留字`bool`来识别，这个保留字是预定义结构类型`System.Boolean`的别名，占一字节。在`bool`和其他类型之间不存在标准的转换。此语言还提供了一个布尔类型`DBbool`，可以表示三种值：`true`、`false`和`null`。这和SQL中布尔表达式的用法类似。

输出一个布尔型的代码如下：

```
bool myBool = (i == 5);
System.Console.WriteLine(myBool ? "I = 5" : "I != 5");

```

Fortran
-------

在Fortran被标准化之前，于1950年代引入了`LOGICAL`关键字和相关的操作`.NOT.`、`.AND.`、`.OR.`等等。

```
logical :: bool ! 宣告一個布林變數名稱為bool
bool=.true. ! 將變數bool存入值.true.
if (bool) then ! 由於條件為.true.所以進入內部執行
 print\*,"bool=",bool ! 顯示 bool=T
 bool=1==2 ! 1==2的運算結果是.false.，將.false.存入變數bool
 print\*,"bool=",bool ! 再次顯示，這時候變成 bool=F
end if

```

Java
----

在Java语言中，布尔变量由原始类型`boolean`表示。Java虚拟机将实际在内存中的表现抽象，这样JVM开发者可以使用尽可能方便的方式来代表布尔量（例如，一个字节或者一个字）。

Java语言规范不允许任何显式或隐式的从`boolean`的转换。这样就需要编译器拒绝如下代码：

```
int i = 1;
if (i)
 System.out.println("i is not zero.");
else
 System.out.println("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 && 1){
 console.log("This is true."); //將會顯示這個，因為boolean是true和1亦是true
}else{
 console.log("This is false.");
}

```

但如果使用`Boolean`物件的話，它总是會被当成`true`，尽管其包含`false`值。

```
var boolean = new Boolean(false); //設boolean為一個Boolean物件，並設定其內容為false

if(boolean){
 console.log("This is true."); //將會顯示這個，因為Boolean物件不是null
}else{
 console.log("This is false.");
}

```

若僅使用 `Boolean()` function，則視同將參數轉為布林值

```
var boolean = Boolean(false); //等同於將 boolean 設為 false

if(boolean){
 console.log("This is true."); 
}else{
 console.log("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 (8=8);
> val it = "YES" : string
- isittrue (7=5);
> val it = "NO" : string

```

Objective-C
-----------

Objective-C提供了`BOOL`类型，以及宏`YES`和`NO`。由于Objective-C是C语言的超集，因此C语言的布尔语义也适用。

Swift
-----

Swift的布林型別是 `Bool`，主要用於 if 和 while 的條件判斷，值只能是真`true`或假`false`。

```
let isSuccess = true
let isOpenDoor = false

```

Ocaml
-----

Ocaml 擁有一個 `bool` 值，為 `true` 或 `false`。

```
# 1 = 1 ;;
- : bool = true

```

和很多其它的語言一樣，Ocaml使用 `true` 或 `false`關鍵字來表示布林值。

Pascal
------

`Boolean`是Pascal提供的基本数据类型，定义和用法如下：

```
(\* 系统或标准声明 \*)
Type 
 Boolean = (False,True);

(\* 用法 \*)
var
 value: Boolean;
 
...
 
value := True;
value := False;
 
if value then
begin
 ...
end;

```

枚举外的值没有被定义。某些编译器实现（如Delphi）为了接口目的拥有特殊的扩展布尔类型，并将其映射到C数值类型上，例如bytebool、wordbool、longbool等。

參考文獻
----

1. ↑   (PDF). Aug 1968  [2007 Apr]. （原始内容存档 (PDF)于2012-07-17）.  请检查`|access-date=`中的日期值 (帮助)
2. ↑ . Dec 1996  [2007 May]. （原始内容存档于2016-03-04）.  请检查`|access-date=`中的日期值 (帮助)
3. ↑   (PDF). 2007  [2008 March]. （原始内容存档 (PDF)于2007-11-20）.  请检查`|access-date=`中的日期值 (帮助)
4. ↑   (PDF). Aug 1999  [2007 May]. （原始内容存档 (PDF)于2012-08-31）.  请检查`|access-date=`中的日期值 (帮助)
5. ↑ . Mar 2007  [2007 May]. （原始内容存档于2012-08-31）.  请检查`|access-date=`中的日期值 (帮助)
6. ↑ . Microsoft Development Network.  [2014-02-24]. （原始内容存档于2016-05-09） （英语）.
7. 1 2 . ORACLE.  [2014-02-24]. （原始内容存档于2009-02-26） （英语）.


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
数据类型 |
| --- |
|  |
| 无解释的 | 
* 位元
* 字节
* 三进制位
* 三进制字节
* Word

 |
|  |
| 数值 | 
* 整数
	+ 符号性
	+ 有符号数
	+ 无符号数
* 定点数
* 浮点数
	+ 双精度
	+ 扩展精度（英语：）
	+ 半精度
	+ 迷你浮点数（英语：）
	+ 八倍精度（英语：）
	+ 四倍精度（英语：）
	+ 单精度
* 有理数（英语：）
* 复数（英语：）
* 任意精度算术
* 区间（英语：）

 |
|  |
| 文本 | 
* 字符
* 字符串

 |
|  |
| 指针 | 
* 記憶體位址
	+ 物理地址
	+ 虚拟地址
* 參照

 |
|  |
| 组合 | 
* 代数数据类型
	+ 广义（英语：）
* 数组
* 关联数组
* 类
* 串列
* 对象
	+ 元对象
* 可选类型
* 积类型（英语：）
* 记录
* 集合
* 联合体
	+ 标签

 |
|  |
| 其他 | 
* 布尔型
* 底层类别（英语：）
* 容器
* 枚举类型
* 异常
* 一等函数
* 不透明数据类型（英语：）
* 递归数据类型
* 信号标
* 字串流
* 顶类型（英语：）
* 类型类
* 類型系統
* 单位类型（英语：）
* Void
* 不定型別

 |
|  |
| 相关议题 | 
* 抽象資料型別
* 数据结构
* 介面
* 种类（英语：）
* 元类
* 对象类型（英语：）
* 原始型別与複合型別
* 协议
* 子类型
* C++模板
* 型別構造器
* 参数多态

 |

 |