gpt4 book ai didi

c - 在 C 中提取整数(假设 32 位整数)中的 8 个半字节有哪些方法?

转载 作者:太空宇宙 更新时间:2023-11-04 00:52:59 25 4
gpt4 key购买 nike

我正在尝试一个基本的哈希表程序..它是计算一个整数中 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;
}

可能是一个简单的逻辑...

最佳答案

请记住,第一位的编号为零,第一个半字节也是,就像数组索引一样。因此,通过从 1 开始循环,您实际上从 second 半字节开始,并从 beyond 整数中获取最后一个半字节。

另外,你移动的方向错了,应该屏蔽掉最高位,即做

for (i = 0; i< nibbles; i++) 
{
temp = (x >> (4 * i)) & 0x0f;
/* ... */
}

关于c - 在 C 中提取整数(假设 32 位整数)中的 8 个半字节有哪些方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12191511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com