为什么winapi的布尔值使用1表示真,使用2表示假?

为什么winapi的布尔值使用1表示真,使用2表示假?,winapi,types,boolean,Winapi,Types,Boolean,我不知道。刚刚在我的调试窗口中看到,存储设备描述符中的布尔值解析为2而不是1。我觉得2的意思是假的。然后我意识到这是真的。但是为什么会有这种奇怪的设计呢?还是我做了错事?从未听说过像多字节布尔运算这样的东西。(顺便说一句,我正在使用MinGW和Qt-Creator-IDE的调试器)存在许多布尔类型的历史原因,本文对此进行了讨论。本质上,任何非零值都是真的,而零是假的。这意味着您不应该这样做比较: if( x == TRUE ) 但是: if( x ) tribool或三态布尔值有一个广泛使用

我不知道。刚刚在我的调试窗口中看到,
存储设备描述符中的
布尔值
解析为
2而不是1。我觉得2的意思是假的。然后我意识到这是真的。但是为什么会有这种奇怪的设计呢?还是我做了错事?从未听说过像多字节布尔运算这样的东西。(顺便说一句,我正在使用MinGW和Qt-Creator-IDE的调试器)

存在许多布尔类型的历史原因,本文对此进行了讨论。本质上,任何非零值都是真的,而零是假的。这意味着您不应该这样做比较:

if( x == TRUE )
但是:

if( x )

tribool或三态布尔值有一个广泛使用的概念(
true
false
未定义
)。这并不是这里正在发生的事情(或者至少,我对此表示怀疑),但我想我会提到它作为对你上一句话的回应。是的,我想称之为Trillian,但它似乎没有流行起来。对于像Boolean这样的原子非指针类型来说,
undefined
有多大意义?我已经非常需要它了,例如,指示尚未设置某个值,或者该值应该从父级继承。但这超出了问题的范围。结构中的数据只与放置它的代码一样好。