在线咨询
有事点这里
有事点这里
看不懂这篇文章?联系我们
("麦洛克菲"长期致力于内核安全的推广与普及,我们更专业!)
求职QQ群:223902435。讨论各种求职笔试面试问题
作者:admin 时间:2015-10-31
标题:位运算在算法中的运用
问题1:计算整数二进制中含有多少个1

size_t CountOne(int num)

{

       size_t count = 0;

      

       while (num)

       {

              ++count;

              num &= (num - 1);

       }

 

       return count;

}

 

size_t count_one(unsigned int x)

{

    size_t count = 0;

    while(x)

    {

       count += (x&1);

      x >>= 1;

    }

    return count;

}

 


问题2:交换2个整数的值

void swap(int *a, int *b) 
{ 
    *a = *a ^ *b; 
    *b = *a ^ *b; 
    *a = *a ^ *b;
 }

问题3:用异或运算设计一个只有一个指针域的双向链表

提示: 
要实现该设计要求,需要记住链表的头结点和尾结点,并在链表结点的的next域存放前一个结点和后一个结点的异或值。即: 
p->next=pl^pr;//头结点的左边结点为NULL,尾结点的右边结点为NULL。 
在遍历的时候,从头结点往右遍历的方法: 
pl=NULL;
p=Head; 
while(p!=Tail) 
{ 
    pr=pl^(p->next); 
    pl=p; 
    p=pr;
 } 
从尾结点往左遍历的方法: 
pr=NULL; 
p=Tail; 
while(p!=Tail)
{ 
    pl=pr^(p->next); 
    pr=p; 
    p=pl; 
}