c ++语言中x&(-x)是什么意思?

作者&投稿:滕聂 (若有异议请与网页底部的电邮联系)
c语言中,!(--x)什么意思?~

C语言运算符,括号里面(---x)表示x的值减去1,相当于“x”变为“x-1”,括号外面“!”表示取反(非0数变为0,0变为1)。
除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符,比如位运算符。




扩展资料

优先级,C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。
结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。
而自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。
具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,[]与数组相关,而->及.是取结构成员。
其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的 真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。
另外在C语言里,没有前置后置之分,因为++ -- 是右结合所以右侧优先运算,表现为 "操作数后置优先级比较高" 的假象,前置和后置的区分是因为运算符重载而后加入C++的
接下来是算术运算符,*、/、%的优先级当然比+、-高了。
参考资料来源:百度百科-C语言运算符

>>结论: 整数运算 x&(-x),当x为0时结果为0;x为奇数时,结果为1;x为偶数时,结果为x中2的最大次方的因子。

因为:x &(-x) 就是整数x与其相反数(负号取反)的按位与:1&1=1,0&1 =0, 0&0 =1。具体分析如下:
□ 当x为0时,x&(-x) 即 0 & 0,结果为0;
□ 当x不为0时,x和-x必有一个为正。不失一般性,设x为正。
●当x为奇数时,最后一个比特为1,取反加1没有进位,故x和-x除最后一位外前面的位正好相反,按位与结果为0。最后一位都为1,故结果为1。
●当x为偶数,且为2的m次方(m>0)时,x的二进制表示中只有一位是1(从右往左的第m+1位),其右边有m位0,左边也都是0(个数由表示x的字节数决定),故x取反加1后,从右到左第有m个0,第m+1位及其左边全是1。这样,x& (-x) 得到的就是x。
●当x为偶数,却不为2的m次方的形式时,可以写作x= y * (2^k)。其中,y的最低位为1。实际上就是把x用一个奇数左移k位来表示。这时,x的二进制表示最右边有k个0,从右往左第k+1位为1。当对x取反时,最右边的k位0变成1,第k+1位变为0;再加1,最右边的k位就又变成了0,第k+1位因为进位的关系变成了1。左边的位因为没有进位,正好和x原来对应的位上的值相反。二者按位与,得到:第k+1位上为1,左边右边都为0。结果为2^k,即x中包含的2的最大次方的因子。
总结一下:x&(-x),当x为0时结果为0;x为奇数时,结果为1;x为偶数时,结果为x中2的最大次方的因子。 比如x=32,其中2的最大次方因子为2^5,故x&(-x)结果为32;当x=28,其中2的最大次方因子为4,故x & (-x)结果为4。当x=24,其中2的最大次方因子为8,故 x&(-x)结果为8。

1.&是bit与操作,就是1&1=1, 1&0=0, 0&0=0那种啦。
2.数字都是补码表示的,而负数的补码=正数的补码取反+1
3.若不是因为+1,则结果是0,分析一下可知,该操作保留的是正数的最低有效bit
4.若x=0,则结果为0

任意一个数(不管奇偶),都可以表示成 2^t + 2^y + 2^z+......,如果z是t y z中的min,那么x&(-x)=2^z,奇数只不过是min=0时候的一个特例,按比特表示时候,表现为获取最后一个bit(代表的数)

简单明了地说,就是取出x的二进制的最右边的为1的位。

x 与 -x 按位与


宣威市13775867783: c语言中x+ - x是什么意思 -
真饼四维: x+(-x)ex: 1+(-1)=0此结果始终为0

宣威市13775867783: 在c++编程中,这两个句子,n= - -x&&++y和n=(--x)||(++y)是什么意思?特别是中间的符号,&&和||_
真饼四维: ”&&“是逻辑与的意思,它的前后两个表达式都为真时整个表达式为真, ”||“是逻辑或的意思,它的前后两个表达式都为假时整个表达式为假.C语言中,&&和||都是短路运算符,先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值……

宣威市13775867783: &在c语言中什么意思 -
真饼四维: 主要有两个意思: 1. 取地址符,用在指针表达式或输出变量地址时 例如 int a; &a就是表示变量a在内存中地址 2. 二进制位与位运算符 1&1=1 0&0=0 拓展资料:C语言主要特点: 1. C语言是高级语言.它把高级语言的基本结构和语句与低级...

宣威市13775867783: c语言!( -- x)什么意思? -
真饼四维: 在 C 语言中,"!" 表示逻辑非运算符,它将一个 bool 值取反.所以,"!(--x)" 表示先将 x 的值减 1,再将结果取反.例如,如果 x 的值为 10,则 "--x" 的值为 9,"!(--x)" 的值为 0(假).请注意,"--x" 中的两个减号是自减运算符,它将 x 的值减 1.这与 "x--" 的效果相同,但是 "--x" 先减去 1 再返回结果,而 "x--" 先返回结果再减去 1.

宣威市13775867783: C语言中a=( - -x==y++)?--x:++y;什么意思_
真饼四维: 这个是c语言中唯一的三目运算符. string1 ?a : b 意思是说:当string语句判断是真的时候,该语句使用结果a,否则是用结果b.

宣威市13775867783: c语言中x加加大于a是什么意思? -
真饼四维: x++>a;//意为x先执行x>a的运算,在执行x++,也就是自加1;如果是++x>a//x先执行++x,自加1,在执行x>a;

宣威市13775867783: x&&y在c语言中什么意思 -
真饼四维: &&是逻辑与 x&&y当x与y都为真时,结果为真(1),否则为假(0)

宣威市13775867783: while(!( -- x));在c语言中是什么意思? -
真饼四维: --x的意思是x=x-1;!是逻辑非运算,!(--x)是循环条件 while(!(--x)); 表示当x=x-1运算后,如果x=0那么因为非运算,那么x不等于0,循环继续; 如果x=x-1运算后,如果x不等于0,则!(--x)=0,结束循环

宣威市13775867783: C语言 请帮忙详细解释下x++和++x -
真饼四维: x++:先赋值在自加,表达式的值为x,而x的值加1,比如b=5,a=b++,那么a=5,b=6;++x:先自加后赋值,表达式的值为x加1后的值,x自身加1.比如b=5,a=++b,那么a=6,b=6;所以你f()函...

宣威市13775867783: c语言中符号&,|,^是什么意思?例如x=a&b,x=a|b,x=a^b分别是什么意思? -
真饼四维: &与,|或,^异或 这些运算都是二进制运算 例:a=7 , b=10 x=a&b = 2(bit0111&bit1010 = bit0010 ); x=a|b = 15(bit0111|bit1010 = bit1111 ); x=a^b = 13(bit0111^bit1010 = bit1101 );

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网