我想让printf函数从右到左打印,因为这个程序将number的值转换为二进制,我希望它以适当的形式打印,例如,如果我转换为16,它就像00001那样写,但它必须看起来像那10000,所以有人知道如何做到这一点,提前谢谢
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x,rem;
printf("please enter number: ");
scanf("%d",&x);
while (x !=0)
{
rem=x%2;
if (rem==0)
{
printf("0");
}
else
{
printf("1");
}
x = x/2;
rem = 0;
}
return 0;
}
答案 0 :(得分:1)
这是:
void print_binary(int x)
{
int skip = 1;
unsigned int mask = 1 << 31;
while(mask > 0){
if(x & mask){
skip = 0;
printf("1");
}else{
if(!skip) printf("0");
}
mask >>= 1;
}
printf("\n");
}
这将打印二进制数而不会尾随零。
如果您希望将结果存储在字符串中,可以使用:
#include <string.h>
void int_to_binary(int x, char * buff) // buff size must be >= 32 !
{
buff[0] = '\0'; // ensure string ends with \0
unsigned int mask = 1 << 31;
for (; mask > 0; mask >>= 1)
{
strcat(buff, (x & mask) ? "1" : "0");
}
}
要检查两个代码,请使用:
int main(int argc, char* argv[])
{
int x;
printf("please enter number: ");
scanf("%d",&x);
char bin[32];
int_to_binary(x, bin);
printf("%s\n", bin);
print_binary(x);
}
我们所做的是使用一个掩码,二进制是从最左边开始的一个“1”,并在每个循环向右移动一步。 “&amp;”是一个咬一口的运营商(我让你知道它是如何运作的)。如果您需要更多解释,请随时提出。
答案 1 :(得分:0)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int binary[20];
int q,i=0;
printf("Enter the decimal no\n");
scanf("%d",&q);
while(q > 0)
{
binary[i]=q%2;
i++;
q=q/2;
}
for(int j=i-1;j>=0;j--)
{
printf("%d",binary[j]);
}
return 0;
}