请高手解析一下这代码,该怎么处理
请高手解析一下这代码
本人c++没入门
------解决方案--------------------
x&(x-1);
去掉二进制值的最后一个1
------解决方案--------------------
1.x=x&(x-1)每次可以消去x的2进制最右边的那个1. 整段的意思是统计x的2进制形式里面1的个数
2.&a的类型是int(*)[5]所以 &a+1那么意味着指向了a[4]后面这个元素。从而ptr1[-1]就得到a[4]这个元素
a的类型是int[5] (int*)a+1;是将a数组转型为int*然后 +1意味着整个表达式得到的值是a[1]这个元素的地址值。然后将这个地址值赋给了ptr2。
本人c++没入门
- C/C++ code
1. int x=999; int countx=0; while (x) { countx ++; x=x&(x-1); } 为什么countx最后是8?x=x&(x-1);是什么意思? 2. int a[5]={1,2,3,4,5}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int *)a+1); printf("%x,%x\n",ptr1[-1],ptr2); 我在xcode上打印出来是 5,-1073755992 解析大师解析一下以上代码
------解决方案--------------------
x&(x-1);
去掉二进制值的最后一个1
------解决方案--------------------
1.x=x&(x-1)每次可以消去x的2进制最右边的那个1. 整段的意思是统计x的2进制形式里面1的个数
2.&a的类型是int(*)[5]所以 &a+1那么意味着指向了a[4]后面这个元素。从而ptr1[-1]就得到a[4]这个元素
a的类型是int[5] (int*)a+1;是将a数组转型为int*然后 +1意味着整个表达式得到的值是a[1]这个元素的地址值。然后将这个地址值赋给了ptr2。