读书人

请高手解析一下这代码,该怎么处理

发布时间: 2012-03-08 13:30:13 作者: rapoo

请高手解析一下这代码
本人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。

读书人网 >C语言

热点推荐