为什么在 Scala 中使用“~”运算符会给我一个负值

Why does using the '~' operator in scala give me a negative value

我是 scala 的新手,正在尝试访问 scala not 运算符。我知道我可以使用“-”运算符进行逻辑 NOT 运算。但有时这个运算符会给我一个否定的答案,比如 (-1)

例如:

 val x = 1
 val y =(~x)

这里的值 y 给出了 -1 而不是 0。但是我需要 1 或 0 形式的答案。有人可以告诉我我在这里缺少什么吗? 提前感谢您的帮助。

~ 是按位求反,即取给定数的每一位取反,将每个 0 位变为 1 位,将每个 1 位变为 0 位。由于有符号数的第一位表示其符号(0 表示正数,1 表示负数),这导致正数和零变为负数(反之亦然)。

如果你想要简单的逻辑否定,只需使用布尔值和!

PS:请注意,在您 post 编辑的代码中,y 的值将是 -2,而不是您在你的 post.

如果您只想将它​​从 0 转换为 1 或反之,您可以使用 ^ (XOR) 运算符。

val x = 1
val y = 1^x

与许多其他语言不同,Scala 不支持在需要布尔值的上下文中使用数字或其他类型的值。例如,编译以下行的 none:

if (1) "foo" else "bar"
if ("1") "foo" else "bar"
if (List(1)) "foo" else "bar"

有些语言有 "truthiness" 的想法,在这里可以用来确定条件是否成立,但 Scala 没有——如果你想要一个布尔值,你需要使用 Boolean.

这意味着普通的逻辑非对数字没有意义,而 ~ 是完全不同的东西——它给你按位求反,这不是你想要的。相反,您似乎想要这样的东西:

val x = 1
val nonzeroX = x != 0
val y = !nonzeroX

即,您明确地将数字转换为布尔值,然后使用标准逻辑否定 (!) 处理它。