布尔 (资料类型)
✍ dations ◷ 2025-05-20 15:01:42 #数据类型
布尔(英语:Boolean)是计算机科学中的逻辑数据类型,以发明布尔代数的数学家乔治·布尔为名。它是只有两种值的原始类型,通常是真和假。布尔数据类型主要与条件语句相关系,条件语句通过根据开发人员指定的条件式,更改程序控制流来允许评估语句的运算值为真或假(即条件成立或不成立)。这是一种更广泛的逻辑数据类型的特殊情况(参见概率逻辑)-逻辑并不总是只属于布尔类型的。
在一些语言中,布尔数据类型被定义为可代表多于两个真值。例如,ISO SQL:1999标准定义了一个SQL布尔型可以储存三个可能的值:真、假、未知(SQL null被当作未知真值来处理,但仅仅在布尔型中使用)。在此情况下,未知先于真及假,因为布尔型一开始是未有实际值,其值是unknown(也有机会是随机值)而非真。
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 60有Boolean
数据类型和相关的操作,定义在Algol 60报告中。这在ALGOL 68中被简化为bool
。
ALGOL 68语言详细说明(177页)中关于布尔操作定义的原文:
10.2.2. 布尔操作数的运算
在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中有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#中,布尔变量通过保留字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 ! 宣告一個布林變數名稱為boolbool=.true. ! 將變數bool存入值.true.if (bool) then ! 由於條件為.true.所以進入內部執行 print*,"bool=",bool ! 顯示 bool=T bool=1==2 ! 1==2的運算結果是.false.,將.false.存入變數bool print*,"bool=",bool ! 再次顯示,這時候變成 bool=Fend 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有两个关键字,true
和false
,两者都为小写。JavaScript是一种弱类型的语言,没有明确的布尔数据类型供其变量使用。但是许多值用在逻辑上下文时可以被当成false
,包括零(0
)、null
、零长度字符串(""
)、NaN
以及undefined
。所有其他变量值,包括一(1
)、空数组和空对象,都被认为是true
。JavaScript 提供了一个Boolean
对象,可以被用作控制布尔值的容包装。
var boolean = true; //設boolean為trueif(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物件,並設定其內容為falseif(boolean){ console.log("This is true."); //將會顯示這個,因為Boolean物件不是null}else{ console.log("This is false.");}
若仅使用 Boolean()
function,则视同将参数转为布尔值
var boolean = Boolean(false); //等同於將 boolean 設為 falseif(boolean){ console.log("This is true."); }else{ console.log("This is false."); //將會顯示這個,因為 boolean 的值為 false}
λ演算
在λ演算计算模型中,布尔型由Church数表示。
LISP有两个特殊的符号T
和NIL
,分别代表了逻辑值真和假。但是,任意非NIL
值都由LISP系统翻译成真。特殊的符号NIL
也用空列表()
表示。因此空列表为假,但是任何有数据的列表都为真。这样,什么都没有为假,其他所有都为真。
和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的布尔类型是 Bool
,主要用于 if 和 while 的条件判断,值只能是真true
或假false
。
let isSuccess = truelet isOpenDoor = false
Ocaml
Ocaml 拥有一个 bool
值,为 true
或 false
。
# 1 = 1 ;;- : bool = true
和很多其它的语言一样,Ocaml使用 true
或 false
关键字来表示布尔值。
Boolean
是Pascal提供的基本数据类型,定义和用法如下:
(* 系统或标准声明 *)Type Boolean = (False,True);(* 用法 *)var value: Boolean; ... value := True;value := False; if value thenbegin ...end;
枚举外的值没有被定义。某些编译器实现(如Delphi)为了接口目的拥有特殊的扩展布尔类型,并将其映射到C数值类型上,例如bytebool、wordbool、longbool等。
相关
- 长期照护长期照护(英语:Long-term care,简称LTC),是一种协助因慢性疾病或身心障碍而长期无法自理的病患,满足各式各样医疗与非医疗需求的服务。长期照护通常会提供看护与非技术性照护,例如
- 法兰西第一帝国法兰西帝国(法语:Empire français),史称法兰西第一帝国(法语:Premier Empire),是法国在1804年5月18日建立的帝国政权。时间分为两段:第一阶段从《共和十二年宪法》(《1804年宪法》)宣
- 长颈鹿科长颈鹿科(学名:Giraffidae)属于偶蹄目反刍亚目。本科下又分长颈鹿属的长颈鹿(Giraffa camelopardalis)与㺢㹢狓属的㺢㹢狓(Okapia johnstoni)两种。都分布于撒哈拉沙漠以南的非
- 数 (语法)有的语言中,名词、代词、形容词、动词有数的范畴。大部分区分数的语言中,一般只有单数和复数,而一些语言中亦有双数(例如阿拉伯语和古希腊语等)、三数(例如多罗马科语)、微数(Paucal
- 傲慢与偏见 (1940年电影)《傲慢与偏见》(英语:Pride and Prejudice)是一部1940年基于简·奥斯汀同名小说改编的美国电影,由罗伯特·Z·伦纳德(英语:Robert Z. Leonard)导演,著名作家奥尔德斯·赫胥黎参与编
- 禄康宗室禄康(满语:ᡠᡴᠰᡠᠨ
ᠯᡠᠺ᠊ᠠᠩ,穆麟德:,1756-1815年),满洲正蓝旗人,清朝宗室、官员,曾任刑部尚书。笔帖式出身。曾任左都御史。嘉庆六年(1801年)正月壬午,接替傅森,担任兵部尚书
- LABOUMLABOUM(韩语:라붐、日语:ラブーム)是NH Media与Nega Network合作于2014年推出的韩国女子音乐组合,最初由6名成员组成,分别为金柔廷、郑昭娟、ZN、廉海仁、安率滨、金律喜。团名“L
- 向峨乡向峨乡,是中华人民共和国四川省成都市都江堰市下辖的一个乡镇级行政单位。2019年12月,撤销向峨乡、蒲阳镇,设立蒲阳街道,以原向峨乡和原蒲阳镇所属行政区域为蒲阳街道的行政区域
- 福格尔山坐标:47°41′14″N 11°28′53″E / 47.68735°N 11.48143°E / 47.68735; 11.48143福格尔山(德语:Vogelkopf),是德国的山峰,位于该国东南部,由巴伐利亚负责管辖,属于巴伐利亚前阿
- 山口壮山口 壮(日语:山口 壯,1954年10月3日-)出生于日本兵库县相生市,毕业于东京大学和约翰·霍普金斯大学。日本政治家、众议院议员,前民主党党籍,2013年离党。曾出任内阁府副大臣、外务