非零整数的“bnot”结果是否总是翻转符号?

Does the result of `bnot` for nonzero integers always flip the sign?

对于非零整数,bnot 的结果是否总是翻转符号?

更准确地说:

  1. bnot NonNeg NonNeg >= 0 总是负数吗?

  2. bnot Neg Neg =< 0 总是非负数吗?

似乎是,除了 -0。此外,它的行为应该像在 C 中一样。

Eshell V11.1.7  (abort with ^G)
1> bnot 1.
-2
2> bnot -1.
0
3> bnot 55.
-56
4> bnot -55.
54
5> bnot 23456789543213456787654323456789765432.
-23456789543213456787654323456789765433
6> bnot -23456789543213456787654323456789765432.
23456789543213456787654323456789765431
7> bnot 0.
-1
8> bnot -0.
-1
9> 


简而言之 - 是的。

原因是 Erlang 使用 U2 编码负整数,这意味着 bnot X 本质上等同于 -X - 1