帮我看看这道逻辑题

phoenix_mqh 2010-09-09 05:44:56
/*
* isPositive - return 1 if x > 0, return 0 otherwise
* Example: isPositive(-1) = 0.
* Legal ops: ! ~ & ^ | + << >>
* Max ops: 8
* Rating: 3
*/
int isPositive(int x) {

return !(x>>31)&!(!x);

}

这道题的意思是 用 输入一个数x 用 ! ~ & ^ | + << >> 这几个操作符来判断 是否为整数,如果是正数返回1,其他返回0.答案已经在上面给出。

我想问的是为什么这样不行? return !(x>>31);
...全文
163 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
qrp_pig 2010-09-10
  • 打赏
  • 举报
回复
上面写错了:
可以写成这样:
return !(abs(x) + x )
qrp_pig 2010-09-10
  • 打赏
  • 举报
回复
return !(x>>31)&!(!x);

我来分析一下,先分析括好内的
(X>>31)x为负数,则(x>>31)为 1,否则为0 ;
(!x)如果x为0,则结果为1,如果x不为0,则结果为1 ;

然后我们分析其他部分!(result1) & !(result2)
很明显!的优先级高于&
所以return !(x>>31)&!(!x)的意思是 : x值不为负数,且x不为0时,返回1,否则返回0

楼主的return !(x>>31); 只判断了x为负数的情况,没有考虑x为0的情况;

其实还可以这么写,hoho

return ( !(x - abs(x) ) ? 1:0 ;
shi3590 2010-09-10
  • 打赏
  • 举报
回复
这思路很诡异啊,是不是程序员写CODE时间长了都喜欢做些诡异的事情?
xkxxzw 2010-09-10
  • 打赏
  • 举报
回复
整数??函数的形成不是定义为整数了吗?
eagleatustb 2010-09-09
  • 打赏
  • 举报
回复
大愚若智...[Quote=引用 13 楼 smith24122412 的回复:]
出题的人和做题的人都是 脑子有病! 我们看帖的都也会看的脑子出毛病!!

明明就 (x>0)即可。为什么要绕啊?楼主绕,下面的也绕?难道世界上SB 太多了?我的天啊。
[/Quote]
smith24122412 2010-09-09
  • 打赏
  • 举报
回复
出题的人和做题的人都是 脑子有病! 我们看帖的都也会看的脑子出毛病!!

明明就 (x>0)即可。为什么要绕啊?楼主绕,下面的也绕?难道世界上SB 太多了?我的天啊。
qgqch2008 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 nadoo 的回复:]

return !(x>>31);

当首位为1时,返回0,当首位为0时,返回1.

但是:0的首位也是0,它既不是正数也不是负数,返回1显然就错了。

!(!x)是为了把0排除掉。
[/Quote]正解了
nadoo 2010-09-09
  • 打赏
  • 举报
回复
return !(x>>31);

当首位为1时,返回0,当首位为0时,返回1.

但是:0的首位也是0,它既不是正数也不是负数,返回1显然就错了。

!(!x)是为了把0排除掉。
wyfwx 2010-09-09
  • 打赏
  • 举报
回复
应该是可以 返回: 负数 !0xFFFFFFFF 正数 !0x0
乐CC 2010-09-09
  • 打赏
  • 举报
回复
原来是正数哦,吓我一跳,整数?
Qyee 2010-09-09
  • 打赏
  • 举报
回复
这与机器对整数的表示有关:
如果用原码表示对+0 -0是不同的
[+0]原=0.000...0
[-0]原=1.000...0
这时你的式子就不行了。
lutao518 2010-09-09
  • 打赏
  • 举报
回复
我测试也可以 vc6.0
zecard_fu 2010-09-09
  • 打赏
  • 举报
回复
return !(x>>31);

我测试可以呀! gcc 4.1.2
十八道胡同 2010-09-09
  • 打赏
  • 举报
回复
我想问的是为什么这样不行? return !(x>>31);
你这样只能保证最高位是0
ccnyou 2010-09-09
  • 打赏
  • 举报
回复
只要判断符号位就行啦,整数32位,右移31位后剩下就是符号位了,再判断,正数符号位是0
十八道胡同 2010-09-09
  • 打赏
  • 举报
回复
楼主 题意都理解错了,不是判断是否为整数 ,是判断是否为正数 x>0
Q446512799 2010-09-09
  • 打赏
  • 举报
回复
看不懂。。
justkk 2010-09-09
  • 打赏
  • 举报
回复
晕了,关注..

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧