C++ 中!!问题

来源:百度知道 编辑:UC知道 时间:2024/06/10 04:41:52
/*
* 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) & 0x1)&!!(x^0);

}
上面是对的,但
/*
* 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) & 0x1)&(x^0);

}
是错的,为什么?两个函数差别就只是!!。到底!!的作用是什么?

[回答]:
先问个问题。你说第一个函数正确,第二个函数错误,指得是有语法错误吗?

我的理解如下:
第一,我觉得没有语法错误
第二,这两个式子的结果是不一样的,假设参数x=4,那么

第一个式子:
((~x>>31) & 0x1)&!!(x^0)
=((~4>>31) & 0x1)&!!(4^0)
=((~0) & 0x1)&!!(4)
=(0x1)&!!(4)
=1
第一个函数返回值是:1

第二个式子:
((~x>>31) & 0x1)&(x^0)
=((~4>>31) & 0x1)&(4^0)
=((~0) & 0x1)&(4)
=(0x1)&(4)
=0
第二个函数返回值是:0

当然,这只是假设x=4得情况,数据不同结果也不一定相同。比如:
若x=5,那么两个函数的返回值就都是:1

!!并没有什么特殊的,只不过
!!(1)=1
!!(4)=1
就是说,你输入得x不是1得时候,
你第一个函数里面的式子总是在和1作位运算,
而你第二个函数里面的式子却是在和x这个数字作位运算,
为运算当然随着操作数的不同,结果也会变化

综上所数,
第一个函数返回值是相对固定的,总是1
第二个函数返回值是混乱的,0或者1,不知道会返回什么结果
楼主所说的对与错应该是这个意思吧。

悉雨辰寂

楼上这个回答简直是百度知道回答的典范阿
小弟佩服,向你学习。

[回答]:
...
综上所述:
...

还有签名

这个分必要给阿,支持一下

利害啊