为什么在 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
即,您明确地将数字转换为布尔值,然后使用标准逻辑否定 (!
) 处理它。
我是 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
即,您明确地将数字转换为布尔值,然后使用标准逻辑否定 (!
) 处理它。