请高手解析一下这代码
本人c++没入门
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解析大师解析一下以上代码