【发布时间】:2021-10-15 11:07:08
【问题描述】:
我有一个简单的问题。我编写了这个小函数,它应该得到一个无符号的 base-10 数字,然后以 64 位的二进制表示形式打印它。我注意到我的代码生成的一个特殊细节,尽管看起来我没有做错任何事情。似乎这些位重复自己!我尝试打印一个以 10 为底的“1”,这个数字是正确的,但是当它到达第 32 位时,我注意到数字重复了!例如:如果我想我的程序在64位二进制表示打印1,那么我应该得到0000000000000000000000000000000000000000000000000000000000000001.相反,我得到0000000000000000000000000000000100000000000000000000000000000001.这是每一个我都试过数是相同的,我不知道这是为什么正在发生。哦,亲爱的 Stack Overflow 程序员,这是怎么回事!我可以使用你的大脑和知识非常感谢你。即使您将我指向在线文章,我们也将不胜感激。
#include <stdio.h>
void decToBinary(int base_10_number);
int main(void)
{
decToBinary(1);
return 0;
}
/* decToBinary: converts a base 10 number into a base 2 number and prints the result */
void decToBinary(int base_10_number)
{
unsigned short bitmap[64];
for (int index = 0, pos = 63; index < 64; index++, pos--)
bitmap[pos] = 1 << index & base_10_number;
for (int control = 0; control < 64; control++)
printf("%i", bitmap[control]);
putchar('\n');
}
【问题讨论】:
-
int base_10_number你知道那是多少位吗?然后考虑在第一个for循环中假设了多少位。尝试检查 32 位数字的 64 位是没有意义的。