&是位操作运算符中的与运算,计算时,先把原来的十进制数转换成二进制,按照如下规则每一位对应着进行运算:
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
x&(x-1)
& 是位操作运算符;
x&(x-1)= 9999 & 9998 的位操作运算。
其实这道题的意图是:将x转化为二进制后包含1的数量是多少?每次x减一后只要有出现0的地方那么位与&后这个位置为0,9999的二进制数为10011100001111.如果我没有猜错这道题貌似在某个公司笔试题出现过
这个操作主要是求x的二进制中1的位数!
C语言 x,y,z=10 和 x=y=z=10 那个对? 如上。。 我是C小白,请如果是声明的话 int x,y,z=10;这样没错,只不过z是声明的同时初始化了