代码改变世界

c++面试小算法

2012-10-18 10:37  禾子  阅读(98)  评论(0)    收藏  举报

1.在已分配的内存中分配内存

     char total[512]={'a','b'};     
     char* pd1 = new (total) char[2]; //在total地址处开始申请空间
     cout<<*pd1<<endl;
     pd1++;
     cout<<*pd1<<endl;
     return 0;

2.测试机器的字节排序

void TestByteOrder()
{
    union
    {
        int n;
        char t;
    } nt;
    nt.n=1;
    char *ptr= (char*)(&nt.n);
    cout << (int) (*ptr) << " ";
    for(int i=0;i<4;++i)
    {
        cout<<(int)(*ptr)<<"";
        ptr=ptr+1;
        
    }
    cout<<endl<<(int)nt.t<<endl;
}

3.二进制中1的个数

void NumOnesInBinary(int number)
{
     int nCount = 0;
     int nTemp = number;
     if(nTemp < 0)
         nTemp = numeric_limits<int>::max() + nTemp;
     while(nTemp)
     {
         if(nTemp & 1)
             ++nCount;
         nTemp = nTemp >> 1;
     }
     cout << "method 1: " << nCount << endl;
     // method2
     nCount = 0;
     nTemp = number;
     while(nTemp)
     {
         ++ nCount;
         nTemp = nTemp&(nTemp-1);
     }
     cout << "method 2: " << nCount << endl;
}