【发布时间】:2012-08-30 07:00:28
【问题描述】:
我正在尝试一个基本的哈希表程序..它是在一个整数中计算 1 的个数:
我有一个哈希表,它是一个数组,在0,1,2...E,F 中有一个 1 的个数
HashTable:
0 0
1 1
2 1
3 2
4 1
5 1
6 2
7 3
8 1
9 2
A 2
B 3
C 2
D 3
E 3
F 4
现在,我想从整数中提取 8 个半字节,以便我可以使用 arr[nibble-value] 来获取每个半字节中 1 的数量。
int arr[16] = {0,1,1,2,1,1,2,3,1,2,2,3,2,3,3,4};
int main (void)
{
int x = 127;
int temp, sum =0, i;
int nibbles = 2 * sizeof(x);
for (i = 1; i<= nibbles; i++)
{
temp = x << (4*i); // <<< I Know this is wrong!!!! <<Here is what I need!!>>
printf("Temp[%d]:%d\n", i, temp);
sum = sum + arr[temp];
}
printf("No.of ones: %d\n", sum);
return 0;
}
可能是一个简单的逻辑......
【问题讨论】:
-
顺便说一句,你的最终目标是:获得每个半字节设置的总位数吗?
-
我只是在尝试基本的哈希表技术,所以来回答你的问题..是的!
-
顺便说一句,设置的位数称为“人口计数”或“人口计数”。有了这个搜索词,您可以找到很多关于其他方法的信息,如果您有兴趣的话。
标签: c bitwise-operators bit-shift