我希望在提出一些反对解决方案的提示之后,因为这是家庭作业,我想自己解决它
我首先是C的新手。事实上我之前从未做过任何事,尽管我以前从大学的模块中获得过java经验。
我正在尝试编写一个将单个整数转换为二进制的程序。我只允许使用按位操作而不使用库函数
任何人都可以提出一些关于我将如何做这件事的想法。显然,我不想要代码或任何东西,只是一些想法,如何探索当前我有点困惑,没有攻击计划。好吧,让它混淆不清:D
非常感谢
答案 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");
}