文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>求二进制中1的个数

求二进制中1的个数

时间:2006-06-04  来源:rwen2012

求二进制中1的个数
 
在新水木上看到的面试题。代码如下:
/* 代码一 */
#include <iostream>
using namespace std; template <typename T>
size_t foo(T t)
{
    size_t ret = 0;
    while (t)
    {
        t &= t - 1;
        ++ret;
    }
 
 return ret;
}
int main(void)
{
 char a;
 size_t sum;
 
 a = 7;
 sum = foo(a);
 
 cout << sum <<endl;
 
 return 0;
}
/* 代码二 */
#include <stdio.h>
unsigned int countbits(unsigned int x)
{
 static unsigned int mask[]={0x55555555,
  0x33333333,
  0x0F0F0F0F,
  0x00FF00FF,
  0x0000FFFF};
 int i;
 int shift;/* number of positions to shift to right*/
 for(i=0, shift=1; i<5; i++, shift*=2)
 {
  x=(x&mask[i])+((x>>shift)&mask[i]);
 }
 return x;
}
int main(void)
{
 unsigned int sum;
 unsigned int a = 7;
 sum = countbits(a);
 
 printf("%d\n", sum);
 return 0;
}
 
 
字符串转换整数
 
 
 
  最近同学去不少公司面试,发现面试题都是大同小异,于是我决定将其记录下来,以备将来用。这个函数摘录于dietlibc,相对比较简单,而libc的太复杂,暂时没去学习。以下代码在VC6下调试通过。
 
 
 
#include <stdio.h>
int atoi(const char* s) {
  long int v=0;
  int sign=1;
  while ( *s == ' '  ||  (unsigned int)(*s - 9) < 5u) s++;
  switch (*s) {
  case '-': sign=-1;
  case '+': ++s;
  }
  while ((unsigned int) (*s - '0') < 10u) {
    v=v*10+*s-'0'; ++s;
  }
  return sign==-1?-v:v;
}
int main()
{
 char *p = "  1234";
 int num;
 num = atoi(p);  printf("%d\n", num);  return 0; }
 
 
 
 
相关阅读 更多 +
排行榜 更多 +
空中跑酷汉化版

空中跑酷汉化版

赛车竞速 下载
修仙传说

修仙传说

角色扮演 下载
魔界零之迷宫

魔界零之迷宫

冒险解谜 下载