【发布时间】:2011-04-24 03:36:19
【问题描述】:
使用除! 之外的合法运算符检查数字x 是否非零。
示例:isNonZero(3) = 1、isNonZero(0) = 0
法律操作:~&^|+<<>>
- 注意:只能使用位运算符。不能使用
if、else、for等。 - Edit1:操作员的数量不应超过 10 个。
- Edit2:考虑
int的大小为 4 个字节。
int isNonZero(int x) {
return ???;
}
使用! 这将是微不足道的,但不使用! 怎么办?
【问题讨论】:
-
在 C 中,非零数是非零的。您没有明确要求该函数返回 1 或 0(但这是隐含的)。请明确定义您的函数将返回什么。你给出的只是 2 个例子。
-
至少让函数返回一个布尔值以避免像
return x;这样的答案(是的,我做到了)。一点上下文也会很有趣,为什么你(任何人)需要编写这样一个具有这样约束的函数? -
+从什么时候开始是位运算符? -
人们真的会在面试中问这种蹩脚的问题吗?它的总 BS(请原谅使用过度技术术语)
-
这个面试问题的正确答案是:你打算对结果做什么?比较?那么为什么我不能首先进行比较呢?我的时间有更好的事情要做,你没能被选为我的老板。
标签: c bit-manipulation