首页 新闻 会员 周边 捐助

c++ x&(-x)这个求的是什么?

1
悬赏园豆:5 [已解决问题] 解决于 2012-08-03 17:39
#include<iostream>
using namespace std;

int main()
{
    int x;

    while( cin>>x)
    {   cout<<(x&(-x))<<endl;

    }
    return 0;
}

各位神,有谁可以告诉我一下,这个球的是什么?可以用在什么场合?

c++
afterward的主页 afterward | 初学一级 | 园豆:184
提问于:2012-08-01 20:39
< >
分享
最佳答案
1

首先我只能回答你一般的疑惑,&这个是与运算,这个题目考的是你的位运算掌握程度,http://www.cnblogs.com/Jimmy009/archive/2012/05/31/2528992.html这篇是我写的关于位运算的

因为我电脑没有装c、现在用php(PS其实是一样的因为php是c开发的),来跟你解释一下,首先你的数字是5和-5,在内存中任何的计算都是以补码的形式存在,这里以4个字节为例:

原码(5)10=00000000 00000000 00000000 00000101(2)
反码(5)10=00000000 00000000 00000000 00000101(2)    
补码(5)10=00000000 00000000 00000000 00000110(2)

原码(-5)10=10000000 00000000 00000000 00000101(2)
反码(-5)10=11111111 11111111 11111111 11111010(2)    
补码(-5)10=11111111 11111111 11111111 11111011(2)

5&(-5) 00000000 00000000 00000000 00000110
    &  11111111 11111111 11111111 11111011
        00000000 00000000 00000000 00000010

最后的答案是 00000000 00000000 00000000 00000010记住这里也是补码,但是我们能识别的是原码所以这里还要在转换一下原码最后答案是00000000 00000000 00000000 00000001(2)=1(10)

希望对你有帮助

收获园豆:3
唯吴独尊 | 小虾三级 |园豆:707 | 2012-08-02 09:27

原码(5)10=00000000 00000000 00000000 00000101(2)
反码(5)10=00000000 00000000 00000000 00000101(2)    
补码(5)10=00000000 00000000 00000000 00000110(2)

正数的原码,反码,补码应该是相同的。

JoJo_song | 园豆:200 (初学一级) | 2014-07-26 16:53
其他回答(1)
0

这应该是按位与运算,作用是取绝对值。。。。用到你要取绝对值得地方

收获园豆:2
羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-02 08:44

(x|(-x))这是求相反数

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-02 08:45

楼下说的不对吧。。。。。

支持(0) 反对(1) 羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-02 09:43

@王凌志: 

请不要误导青少年 呵呵 你多写点数据测测看是不是求绝对值

支持(1) 反对(0) 唯吴独尊 | 园豆:707 (小虾三级) | 2012-08-02 13:41

@唯吴独尊: 。。。别这么说。。我也是青少年。。。真的呢?我试试。。。

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-02 13:51

@唯吴独尊: 可是为什么24这些偶数就不符合???

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-02 14:04

@王凌志: 不符合什么? 你用二进制的思路求解就对了

支持(0) 反对(0) 唯吴独尊 | 园豆:707 (小虾三级) | 2012-08-02 15:53

@唯吴独尊: 嗯嗯嗯嗯,算了一下,的确,您说的对

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-02 16:24

@王凌志: 承让承让 谢谢

支持(0) 反对(0) 唯吴独尊 | 园豆:707 (小虾三级) | 2012-08-02 21:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册