【发布时间】:2016-04-26 05:36:02
【问题描述】:
我正在编写一个函数is_zero,如果x != 0 应该返回0,否则返回非零。我不允许使用任何常量。例如,x == 0 是不允许的。 (也不允许使用 == 运算符)
我被允许使用的唯一运算符是=、~、^、*(取消引用)、&、|、<<、>> 和 + .
我现在编写函数的方式是,如果x != 0,它将返回0,但即使在x == 0 时,它仍然返回0,这是不应该的。我尝试了各种组合,但考虑到限制,这个家庭作业问题似乎是不可能的。我在这里发帖是最后的努力。
谁能告诉我如何让我的代码在x == 0 时返回0 以外的东西,而在x != 0 时仍返回0?
int is_zero(int x) {
return (x ^ x);
}
【问题讨论】:
-
写下一些简单的非零值的位模式,并进行试验。例如,如果你有一个非零值,如果你使用按位和本身会发生什么?如果你有按位和相反(使用
~运算符)本身会发生什么?当您在非零值上使用~时会发生什么?值为零? -
return (x ^ ~x);会起作用。 -
@DavidC.Rankin,该解决方案似乎不起作用。
-
如果不想使用==,不如直接使用
if (x) { return 0;} else { return 1;}这样的条件 -
非常厌倦“不使用 A、B、C 怎么办?” “(使用 D 发布的答案)”“哦,也不能使用 D”“(使用 E 发布的答案)”“哦,也不能使用 E”等等......
标签: c bitwise-operators