gpt4 book ai didi

c - 如何在 C 中设置/翻转位域

转载 作者:行者123 更新时间:2023-11-30 20:22:08 27 4
gpt4 key购买 nike

我试图将 uint64_t 位字段全部设置为 0。然后,当我在给定字符串中调用该函数,并且它与我设置的静态全局数组匹配时,它将翻转位为 1。目前我有以下代码,但由于某种原因,当给它不同的字符串时,它遵循相同的行为。例如,当我输入以下字符串“ABC”时,它应该打印出111000。我将如何得到以下行为。

const size_t SETSIZE = sizeof(uint64_t) << 3;
char key[5] = { 'A', 'B', 'C', 'D', 'E', 'F' }

uint64_t set_encode(char *st) {
int i, j;
uint64_t set = 0;
int length = strlen(st);
for (i = 0; i < length; i++) {
for (j = 0; j < 5; j++) {
if (st[i] == key[j]) {
printf("%c", st[0]);
set = set | 1 << (SETSIZE - 1 - i);
}
}
}
printf("%lu\n", set);
return set;
}

最佳答案

Or-ing 编码为 int而不是所希望的uint64_t

1 <<(SETSIZE-1-i)结果类型 int 。此外,可能是 UB,因为某些类次计数肯定比 int 更宽。 .

// set = set| 1 <<(SETSIZE-1-i);
set |= ((uint64_t) 1) <<(SETSIZE-1-i);
<小时/>

有问题的打印说明符。 "%lu"可能无法锁存uint64_t .

#include <inttypes.h>

// printf("%lu\n",set);
printf("%" PRIu64 "\n", set);

// Perhaps print as hexadecimal makes more sense
printf("%" PRIX64 "\n", set);
<小时/>

请注意key[]太小了。

// char key[5] = {'A','B','C','D','E','F'}
char key[5+1] = {'A','B','C','D','E','F'}
// or
char key[] = {'A','B','C','D','E','F'}

为什么打印 st[0]

// printf("%c",st[0]);
printf("%c",st[i]);
<小时/>

即使进行了修复,OP的最终目标也不清楚,也没有达到。

关于c - 如何在 C 中设置/翻转位域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40665017/

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