仅使用 C 中的按位运算符检查数字 x 是否为正 (x>0)
isPositive
- 如果 x > 则返回
,否则true
0false
示例:isPositive(-1)
合法操作:!
~
&
^
|
+
<<
>>< /code>
最大操作数:8
注意:不允许使用条件语句。
inline bool isPositive(int32_t x) {
return ???;
}
isPositive
- return true
if x > 0
, otherwise false
Example: isPositive(-1)
Legal ops: !
~
&
^
|
+
<<
>>
Max ops: 8
Note: No conditional statements are allowed.
inline bool isPositive(int32_t x) {
return ???;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
x&(1<<31
是检查数字是否为负数。!x
是检查数字是否为零。如果数字不为负数,则为正数并且不为零。
x&(1<<31
is to check if the number is negative.!x
is to check if the number is zero.A number is positive if it's not negative and not zero.
让我们来玩一下符号位:
sign(~n)
: 1 if n >= 0要摆脱
n
为 0 时的情况:sign( ~n + 1)
:如果 n > 则为 1 0 或 n = MIN_INT因此,我们希望两个函数都返回 1 的情况:
Let's play with the sign bit:
sign(~n)
: 1 if n >= 0To get rid of the case when
n
is 0:sign(~n + 1)
: 1 if n > 0 or n = MIN_INTSo, we want the case when both functions return 1:
为什么不使用
XOR (^)
?试试这个,
可以很好的处理0的情况。
Why not use
XOR (^)
?Try this,
It can deal with the 0 case well.
假设采用二进制补码表示(并非总是如此!),这可以通过测试是否设置了最高有效位(在这种情况下数字为负)来实现。
请注意,以下代码使用非法操作(
+
、*
和-
),但这些只是为了清晰起见和平台独立性。如果您更了解您的特定平台,例如int
是一个 32 位数字,则相关常量可以替换为它们的数值。Assuming a two’s complement representation (not always the case!), this can be achieved by testing whether the most significant bit is set (in which case the number is negative).
Notice that the following code uses illegal operations (
+
,*
and-
) but these are for clarity and platform independence only. If you know more about your particular platform, e.g. thatint
is a 32 bit number, the relevant constants can be replaced by their numeric value.已经有一段时间没有做过汇编了,但据我记得单词中的第一个数字代表负值,例如 1000 是 -8,因此如果最高有效位是 1,则数字是负数。所以答案是
!(x>>31)
Haven't done assembler for quite a while, but as far as I remember first digit in the word represents negative value e.g. 1000 is -8, hence if most significant bit is 1 the number is negative. So the answer is
!(x>>31)
如果您使用使用 MSB 作为标牌位的数字系统,您可以执行以下操作:
if your working with a number system that uses the MSB as the signage bit, you can do:
您在这里还有另一个选择:
它只是一个 (0 & min(0,x))。
此处测试
You have another option here:
It is just a (0 & min(0,x)).
Test here
int isPositive(int x)
{
}
如果给定 no is +ve 则返回 1,如果给定 no is -ve 则返回 0
在这个函数中我们得到符号位,如果是 1 则意味着 no is -ve 所以我们返回 0
如果符号位为 0,则表示数字为 +ve,因此我们返回 1 。
int isPositive(int x)
{
}
It will return 1 if given no is +ve and return 0 if given no is -ve
in this function we got sign bit if that is 1 it means no is -ve so we return 0
and if sign bit is 0 it means number is +ve so we return 1 .
X 将为 int 或 char(整数类型)。
X will be either int or char(Integral type).
返回 !((x>>31)&1);
这是为了检查MSB。
return !((x >> 31) & 1);
This is to check MSB.