C程序:二进制表示中有多少个"1″;二进制表示中有多少位是不同的
2010-04-21 08:55
393 查看
//对于一个字节(8bit)的变量,求其二进制表示中”1″的个数,要求算法执行效率尽可能的高 int num_a(unsigned char c) //方法a { static unsigned char arr[] = { 1, 2, 4, 8, 16, 32, 64, 128 }; int ret = 0; for (int i = 0; i < 8; i++) { if (arr[i] & c) { ret++; } } return ret; } void num_b_pre() //使用方法a产生方法b需要的数据 { for (int i = 0; i < 256; i++) { if (i % 16 == 0) { printf("/n"); } printf("%d, ", num_a(i)); } } int num_b(unsigned char c) //查表法效率最高 { static unsigned char arr[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8, }; return arr[c]; } //长整型的二进制表示中有多少个"1″ int numDWORD(unsigned long d) { return num_b(d & 0xff) + num_b((d >> 8) & 0xff); } //两个长整型,二进制表示中有多少位是不同的 int diffDWORD(unsigned long a, unsigned long b) { return numDWORD(a|b) - numDWORD(a&b); }
相关文章推荐
- 整数A和B的二进制表示中有多少位不同
- 给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?
- 整数A和B的二进制表示有多少位不同
- 求整数A和整数B的二进制表示中有多少位是不同的?
- 如何求整数A和B的二进制表示中有多少位不同?
- 求正整数A和正整数B的二进制表示中有多少位是不同的
- 给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?
- 求整数A和B的二进制表示中有多少位是不同?
- 编程之美课后题:求得两个正整数A和B的二进制表示有多少位不同
- 给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?
- 整数A和B的二进制表示中有多少位是不同的
- 整数A和B的二进制表示中有多少位不同
- 位运算笔试练习——判断两个整数(32位)的二进制表达有多少个位不同?
- 计算一个数的二进制表示中有多少个1
- 两个int(32位)整数a和b的二进制表达中,有多少个位(bit)不同
- 正整数的二进制表示有多少个1
- C程序:n!的二进制表示中最低位1的位置
- C 两个整数m和n的二进制表达中,有多少个位不同
- 编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- 计算一个十进制数的二进制表示有多少位1