c语言x&(x-1) 是什么意思

x=9999

&是位操作运算符中的与运算,计算时,先把原来的十进制数转换成二进制,按照如下规则每一位对应着进行运算:
1&1=1 1&0=0 0&1=0 0&0=0
这道题就没这么麻烦了,因为9999是奇数,转换成二进制数后,最后一位肯定是1,所以9998除了最后一位是0以外,其他位数都和9999的相同,这样除了最后一位,其他位数只可能有两种运算:1&1=1和0&0=0,而最后一位进行的运算是1&0=0,这样,得到的结果就与9998的二进制数是一样的了,换言之 9999&9998=9998
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-30
x&(x-1)
& 是位操作运算符;

x&(x-1)= 9999 & 9998 的位操作运算。本回答被提问者和网友采纳
第2个回答  2012-09-06
其实这道题的意图是:将x转化为二进制后包含1的数量是多少?每次x减一后只要有出现0的地方那么位与&后这个位置为0,9999的二进制数为10011100001111.如果我没有猜错这道题貌似在某个公司笔试题出现过
第3个回答  2010-10-24
这个操作主要是求x的二进制中1的位数!
第4个回答  2010-10-24
C语言 x,y,z=10 和 x=y=z=10 那个对? 如上。。 我是C小白,请如果是声明的话 int x,y,z=10;这样没错,只不过z是声明的同时初始化了

c语言x&(x-1) 是什么意思
x&(x-1)的结果,根据按位与的特性,当操作数一方为0时,结果为0,于是 x&(x-1) = A0B 对比x原始值A1B,x&(x-1)即把最后一个1改成0.

请教c语言中:x = x & (x-1),这段代码代表什么意思啊?&是取地址运算符...
x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0 &是与运算符

x &= x-1c语言中什么意思
x - 1即进行十进制的减法,如x 为十进制的30,则x-1的结果为十进制的29 如果结果用2个字节表示则结果为:00 00 00 00 00 01 11 01 又因为x 是30其二进制表示为:00 00 00 00 00 01 11 10 & 是为运算的与运算符只有对应位置上全为1结果才为1,故最后结果是 00 00 00 00 00 01 ...

x = x&(x-1);这个是按位与的运算吗?求解释程序运行结果
题目的意思是X从9999开始按照按位与缩小,依次缩小直到x=0为止!就会跳出循环!这里循环运行了8次才能得出x=0的结果,所以countx=8!

x&(x-1)?"yes":"no" 这句表达式能判断x是否是一个2的幂么?
即:x&(x-1)?"no":"yes";位运算 这个其实并不难,你听我说 几句:首先来看几个数,这几个数不大,都是10以内的,我们看看它们对应的 二进制数 是啥 0——0 1——1 2——10 3——11 4——100 5——101 6——110 7——111 8——1000 9——1001 === 就写这些吧,所谓“位”...

C语言中 x & -x 表示什么意思?
逻辑判断,叹号是非的意思,x是各变量,如果x为零那么!x就是1,相反是0。若X是“0”(为假),则“!x”就不是零(为真),则里面为真,进入if下的大。若X不是“0”(为真),则“!x”就是零(为假),则里面为假,跳过if下的大。

c语言中x&(1<
这个是涉及到运算符的问题。x&(1<

C语言x&1什么意思
从命令的角度讲,是将x的每一bit(2进制中的1和0都占一个bit)与0001的每一bit做与运算."&"是"与运算"的意思,1&1=1,其他情况(1&0,0&1,0&0)都=0.从逻辑的角度来讲,这个命令就是取x的最左边一位.例如x是0011,x&1得到0001,如果x是0110,x&1得到0000....

关于x&(-x)
在C语言中 & 是 按位与运算符 -x 是x 的补码;补码为取反+1 x&(-x)返回x与2^64的最大公约数,即x最多能被n个2整除就返回2^n;如果x是奇数返回1 所以返回值为0,表示x=0 返回值为1,表示x为奇数 返回值为其他数,表示x为x与2^64的最大公约数 在条件语句中可以判断 该数是否为0...

c语言中为啥x&&1等效于x!=0,请详尽解答
x&&1其实是先判断x,若x非0,在判断1,1非0,所以x&&1判断结果为真,若x为0,则&&后面无需判断,x&&1判断结果为假。所以等效于x!=0;个人认为在if语句中直接判断if(x)机会足够了

相似回答