在Julia中,布尔值在计算时具有数值(false
= 0
,true
= 1
)。
以下所有内容都有预期结果:
true + false # 1
false - true # -1
false / true # 0.0
true ÷ false # DivideError: integer division error
0 ÷ 1 # 0
除外:
false ÷ true # false
那么为什么 false ÷ true
的结果是 false
,而不是像 0 ÷ 1
那样的 0
呢?
更新:看起来乘法也有相同的行为:
false * true # false
我可以理解布尔类型Bool
与其他数字类型可能有不同的行为,但奇怪的是加法和减法的行为与乘法和除法不同。
数学运算文档指出:
请注意,Bool是整数类型,所有通常的提升规则和数字运算符也在其上定义。
因此,在所有算术上下文中,它不将布尔值视为整数有点令人惊讶。
Base.div()
函数的别名。我不确定,也从未使用过Julia,但我猜div函数始终尝试返回与操作数相同类型的内容,因此是布尔值。猜测:div在内部进行bool->int转换,进行整数除法,然后再进行布尔转换。对于 false÷true 这种情况可以执行,但对于 true÷false,整数除法步骤将失败。 - Torge Rosendahldiv(false, true)
相同。https://docs.julialang.org/en/v1/manual/mathematical-operations/#Division-functions - General Grievancediv(x::Bool, y::Bool) = y ? x : throw(DivideError())
- DNF