#include<iostream> using namespace std; int main() { int x; while( cin>>x) { cout<<(x&(-x))<<endl; } return 0; }
各位神,有谁可以告诉我一下,这个球的是什么?可以用在什么场合?
首先我只能回答你一般的疑惑,&这个是与运算,这个题目考的是你的位运算掌握程度,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)
希望对你有帮助
原码(5)10=00000000 00000000 00000000 00000101(2)
反码(5)10=00000000 00000000 00000000 00000101(2)
补码(5)10=00000000 00000000 00000000 00000110(2)
正数的原码,反码,补码应该是相同的。
这应该是按位与运算,作用是取绝对值。。。。用到你要取绝对值得地方
(x|(-x))这是求相反数
楼下说的不对吧。。。。。
@王凌志:
请不要误导青少年 呵呵 你多写点数据测测看是不是求绝对值
@唯吴独尊: 。。。别这么说。。我也是青少年。。。真的呢?我试试。。。
@唯吴独尊: 可是为什么24这些偶数就不符合???
@王凌志: 不符合什么? 你用二进制的思路求解就对了
@唯吴独尊: 嗯嗯嗯嗯,算了一下,的确,您说的对
@王凌志: 承让承让 谢谢