首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-08 
请高手解析一下这代码本人c++没入门C/C++ code1.int x999int countx0while (x) {countx ++xx&(x-1)

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

热点排行