您可以使用算术运算符在0和1之间翻转吗


77

有没有一种方法可以不使用逻辑运算符和按位运算符(仅算术运算符)在值为0和1的整数之间进行转换?

即。“ variable?= variable”将使变量为1(如果为0)或0(如果为1)


请注意,在JavaScript中,下面的许多答案都是布尔值,而不是数字。例如:!x(x <= 0)(x == 0),等等
布赖恩唐宁

Answers:


228
x = 1 - x

将在0和1之间切换。


2
要更广泛地应用它,如果x在正数的特定范围内,那么您也可以使用它来反转其值(即7-x= 0 / 7、1 / 6、2 / 5、3 / 4)。
冥王星

28

编辑:我误解了问题,以为OP可以使用any运算符

还有一些...(忽略这些)

不使用运算符?


^是按位运算符,!是逻辑运算符。
MAK 2010年

当您的第二个想法可行时,x = 1-x是一个更好的解决方案。拥有数组是过分/浪费的。
卡洛斯

x = !x是一个很好的解决方案,因为它可以处理非零或一的值。
马克·英格拉姆


17

另一种方式:

x = (x + 1) % 2

4
+1,因为即使您不小心给出了超出该范围的整数,这也将始终为您提供0或1。
尼克·福奇

在此问题的范围内,@ NickForge认为输入1或0之外的其他内容是非法的,您确定不会对此提出抗议是好的吗?
亚历克斯

1
@Alex这是否是一件好事,取决于语言和对“防御性”的期望。例如,在C语言中,布尔值存储为大于1位的整数,因此“非法”的概念有些模糊。
尼克·福奇

1
答对了!我想执行一个基于整数的“ XOR”,而这恰好是这样的: x = (A + B) % 2如果A和B都为0或1。谢谢!
noio

6

斯托尔第二种方法的喜剧变奏

x = "\1"[x]

呵呵,喜欢非显而易见的解决方案。
Hamish

2
如果喜欢,您会喜欢的x = x["\1"];(C和C ++)。
史蒂夫·杰索普

5

另一种翻转方式。

x = ABS(x - 1) // the absolute of (x - 1)


4

只是有点变化:

x = 1 / (x + 1);

x = (x == 0);

x = (x != 1);

不知道您是否考虑==!=成为算术运算符。可能不是,显然,尽管它们可以在C语言中运行,但更强类型的语言不会将结果转换为整数。


4

你可以简单地尝试这个

+(!0) // output:1

+(!1) // output:0

不过,这是高度依赖语言的。
L. Dai

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.