C编程 - 将整数转换为二进制

时间:2010-02-03 08:50:28

标签: c binary

我希望在提出一些反对解决方案的提示之后,因为这是家庭作业,我想自己解决它

我首先是C的新手。事实上我之前从未做过任何事,尽管我以前从大学的模块中获得过java经验。

我正在尝试编写一个将单个整数转换为二进制的程序。我只允许使用按位操作而不使用库函数

任何人都可以提出一些关于我将如何做这件事的想法。显然,我不想要代码或任何东西,只是一些想法,如何探索当前我有点困惑,没有攻击计划。好吧,让它混淆不清:D

非常感谢

6 个答案:

答案 0 :(得分:6)

考虑一下使用按位运算符可以做些什么。

E.g。你可以像这样测试一个位是1还是0:

int bit = value & 1;

您也可以将int中的位移位:

val = val >> 1;

要测试int中的第i位,你可以这样做:

int bit = (value >> i) & 1;

希望这有足够的提示让你开始。

答案 1 :(得分:3)

一点一点地撕开它。使用移位。可以使用查找表一次处理多个位。

答案 2 :(得分:0)

您可以将输出存储在字符数组

char output[33]; // for 32 bit integers, plus a null terminator if you need one
output[n] = '1';

或者您可以在屏幕上“存储”输出

printf("1");

虽然这可以被认为是使用库函数

答案 3 :(得分:0)

您可能想要记住如何手动将数字转换为二进制表示。这可能不是最有效的方法,但感觉更自然而不仅仅是与变动的操作员一起玩。

要将数字转换为二进制表示,您基本上可以查看哪个2 ^ i部分适合该数字,并根据该数字构建二进制数。

答案 4 :(得分:0)

我认为你现在应该完成你的作业,所以这是我的解决方案。 :)

我刚才正试图用C编写一个ascii-to-binary + binary-to-ascii转换器,巧合的是。使用strtol()函数和所有的二进制到ascii相当简单,我的转换字符(实际上是一个int)的代码是这样的:

void chartobinf(int c, FILE* out)
{
  size_t n = 8*sizeof(unsigned char);
  while (n-- > 0)
    fputs(((c >> n) & 1) ? "1" : "0", out);
}

这会以正确的顺序打印出一个字符(更改参数和尺寸类型以满足您的需要)(在我看来,这是最大的价值),与许多其他解决方案相反。

我特别喜欢这个解决方案,因为它很短。然后,它不会将值保存为字符串或类似的东西。

编辑:我想也可以用{/ 1>调用fputs()调用

fputc(((c >> n) & 1) ? '1' : '0', out);

可能要快几微秒?说不上。

答案 5 :(得分:0)

如下所示找到二进制整数的一种解决方案:使用bitshifting

int DintoB(int num){
int a=31;  enter code here`//as 32 bit number int.

while (a>=0){
    int n=num>>a;//bit shifting
    if(!(n%2))printf("0");
    else printf("1");
    a--;
}
printf("\n");
}