77 有没有一种方法可以不使用逻辑运算符和按位运算符(仅算术运算符)在值为0和1的整数之间进行转换? 即。“ variable?= variable”将使变量为1(如果为0)或0(如果为1) algorithm — 丹尼尔·索佩尔 source 请注意,在JavaScript中,下面的许多答案都是布尔值,而不是数字。例如:!x,(x <= 0),(x == 0),等等 — 布赖恩唐宁
228 x = 1 - x 将在0和1之间切换。 — 贡佐牧师 source 2 要更广泛地应用它,如果x在正数的特定范围内,那么您也可以使用它来反转其值(即7-x= 0 / 7、1 / 6、2 / 5、3 / 4)。 — 冥王星
28 编辑:我误解了问题,以为OP可以使用any运算符 还有一些...(忽略这些) x ^= 1 // bitwise operator x = !x // logical operator x = (x <= 0) // kinda the same as x != 1 不使用运算符? int arr[] = {1,0} x = arr[x] — 脚步 source ^是按位运算符,!是逻辑运算符。 — MAK 2010年 当您的第二个想法可行时,x = 1-x是一个更好的解决方案。拥有数组是过分/浪费的。 — 卡洛斯 x = !x是一个很好的解决方案,因为它可以处理非零或一的值。 — 马克·英格拉姆
17 另一种方式: x = (x + 1) % 2 — 麦 source 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] — 高炉 source 呵呵,喜欢非显而易见的解决方案。 — Hamish 2 如果喜欢,您会喜欢的x = x["\1"];(C和C ++)。 — 史蒂夫·杰索普
4 只是有点变化: x = 1 / (x + 1); x = (x == 0); x = (x != 1); 不知道您是否考虑==并!=成为算术运算符。可能不是,显然,尽管它们可以在C语言中运行,但更强类型的语言不会将结果转换为整数。 — 史蒂夫·杰索普 source
!x
,(x <= 0)
,(x == 0)
,等等