我正在用 C 语言编写一个汉明权重函数。我想知道我是否正确地完成了它,所以我的计划是测试数字 5。我不想在 google 上搜索 5 的二进制文件并编写了一些代码来做到这一点我自己,但是当我运行代码时我得到了这个:
testing code
bit length of 5: 32
five: -1354390872 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
这没有意义,因为没有任何东西能够输出这么大的负数。 这是我的代码
#include <stdio.h>
int main() {
printf("\ntesting code\n");
int fv[32];
int fiv = 5;
for (int i = 0; i < 32; i++) {
if (fiv & 1) fv[32 - i] = 1; else fv[32 - i] = 0;
fiv >>= 1;
}
printf("bit length of 5: %ld\n\n", (sizeof(5) * 8));
printf("five: ");
for (int i = 0; i < 32; i++) {
printf("%d ", fv[i]);
}
printf("\n");
return 0;
}
我期望用整数 0 或 1 填充数组,其中数组表示数字的二进制值。它确实用表示数字的 32 位整数填充了数组,但是 -1354390872 不是 0,也不是 1。我尝试将我迭代的数字更改为
(sizeof(n) * 8
以说明字节的大小,但这只是挂起,我无法弄清楚,因为没有 sizeof()
的联机帮助页。
有人可以帮忙吗,我确信有一种我不知道可以使用的二进制格式,但老实说我不知道。
您应该使用
fv[32 - i]
而不是 fv[31 - i]
来避免访问超出数组末尾。