C++位运算

请问 x&(-x) 是什么运算 运算的过程是什么?

位运算是对数据的每一个二进制位做逻辑的 与、或、非 等运算,在计算机中,数据是以二进制的形式存储的,如常用的char型的数据是8个二进制位组成,short型是16个二进制位组成。位运算就是对每一个数据位做运算。
位运算的优点是计算速度快,一般是单周期指令,就是一个时钟周期就完成的事情。而加减就比较麻烦了,这个在PC机上的差别不太明显,但在嵌入式的CPU中就比较大,如对一个数a除以8,就可以将a右移3位,a>>3,代码效率高。
位运算用的最多的应该是在嵌入式领域中,在嵌入式的CPU中的每一个寄存器的每一位都有特定的含义,经常需要对某一位进行操作,而又不希望影响别的位,如让AVR单片机的PA口的第2位变成低电平,其它的不变,就可以写成:PORTA = PORTA & 0x02 .如果不用位运算,就不好实现了。
希望对你能有所帮助。追问

int main()
{
int lowbit(int x);
int a,b;
while(cin>>a)
{
b=lowbit(a);
cout<<b<<endl;
}
return 0;
}
int lowbit(int x)
{
return x&(-x);
}
那请问这段代码是怎么运行的 我输入1输出1、输入2输出2、输入3输出1、输入4输出4、输入5输出1 求大神指点输出是怎么来的

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-07-18
输出的是x二进制表示里面最低位那个1的十进制大小
第2个回答  2014-07-18
&是位与,就是和的意思,1&1为1,其余都是0.
x&(-x),负数是用补码表示,就是取反加1.
那么x&(-x)结果是,奇数结果为1,偶数为自己
第3个回答  推荐于2016-08-15
会二进制不?
&是与运算

x为输入值,-x是相反数,计算机中存储为x的 补码
然后 两者进行 与运算

例如:
x=1
x:0001 -x:1111 x&(-x)为 0001,等于1
x=4
x:0100 -x:1100 &运算为0100,等于4
x=5
x:0101 -x:1011 &运算为 0001,等于1本回答被提问者采纳

C++位运算,位取反,位左移,位右移
在C++编程中,位运算是一种操作数据中每个比特位的运算方式。这些操作包括位取反、位左移和位右移等。这些运算在处理低级硬件和内存管理时特别有用,具有高效性能的特点。让我们通过一个实例深入理解这些操作的实现和作用。首先,初始化无符号字符变量 bits 为八进制形式 0227,即十进制形式是 151。位...

C++中的位运算
与运算(&):两个数据按位进行逻辑与操作。只有当两个位都是1时,结果才会是1。例如,3与5进行与运算,其二进制表示为00000011与00000101,结果为00000001,即1。负数以补码形式参与与运算。用途:清零、取特定位、判断奇偶。如判断一个数是奇数还是偶数,可以使用与运算与1进行操作。或运算(|):两...

详解C++按位与、或、异或运算
C++的位运算符按位与(&), 按位或(|), 和异或(^)在编程中有着重要的应用。它们都是针对二进制位进行操作,对于负数,需使用补码形式参与运算。首先,按位与(&)的规则是:0与0结果为0,0与1结果为0,1与0结果为0,1与1结果为1。它可以用来清零、取特定位或判断奇偶性。例如,通过与一个全...

c++中用位运算(按位异或)交换浮点型变量值的原理是什么?
在C++中,使用位运算进行浮点型变量值交换的原理涉及到异或运算。异或操作符 (^) 是在位级别执行的,它比较两个操作数的每一位,如果位相同则结果为0,不同则结果为1。具体应用到浮点型变量交换中,需要通过异或操作来实现数据的交换。然而,需要注意的是,直接使用异或进行交换存在一定的限制和潜在的错...

c++中,符号=和&=是什么意思?
c++中符号=和&=是用于赋值操作的位运算符。首先,我们来了解一下右移运算符(>>)。例如,定义一个整型变量i=2,其二进制形式为10。若执行i>>=1操作,则i的值会变为1,即二进制表示为1。右移运算符将操作数的位向右移动指定的位数。在这个例子中,i的二进制形式向右移动了一位,所以最右边的...

【C++新手教程】C++ 运算符
C++中的运算符是编程中的关键符号,用于指示编译器执行特定数学或逻辑操作。本文将详细解释算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符以及其他重要运算符,以帮助新手更好地理解和使用。1. 算术运算符C++支持的算术运算符包括:加、减、乘、除等。例如,变量A(10)和B(20)的运算实例,...

c++的基本进制和它的运算有没有什么简便方法
c++代码中的数据可以用10进制,8进制,16进制,运行时是进行2进制运算。简便方法当然有,多是位运算,位运算效率比一般的加减乘除高很多,以下是一些位运算技巧:将最右侧0位改为1位: x | (x+1)x &= (x-1); \/\/将x的最右边的1位变成0 二进制补码运算公式:-x = ~x + 1 = ~(x-1)...

C++位运算
位运算用的最多的应该是在嵌入式领域中,在嵌入式的CPU中的每一个寄存器的每一位都有特定的含义,经常需要对某一位进行操作,而又不希望影响别的位,如让AVR单片机的PA口的第2位变成低电平,其它的不变,就可以写成:PORTA = PORTA & 0x02 .如果不用位运算,就不好实现了。希望对你能有所帮助。

c++中的位运算计算问题
然后按位取反,得:1111111111111111111111111111110,最后再加个1,就是0xFFFFFFFF,a|b-c,这要考虑到运算符的优先级问题,乘除求余的优先级大于加法减法,加法减法大于与运算,与运算大于异或运算,异或运算大于或运算,现在再来看你的问题,a|b-c:先做减法b-c,得-1,然后再与1做或运算,得到-1...

c++中的异或是什么?
C++中的异或是一种位运算操作符,用符号"^"表示。异或运算是一种二进制运算,它对每一位执行“异”则“或”的操作。具体来说,如果两个相应的二进制位相同,则结果为0,否则为1。这种运算在C++中常被用于一些低级的位操作,如加密、数据校验或者某些特定的算法中。举个例子,...

相似回答