编辑:
我正在尝试创建一个接受数字的程序,显示其二进制数并显示该二进制文件的反向。但我不知道如何以一种好的方式或以任何方式做到这一点〜所以我可以得到帮助 这是我的代码:
/*
* C Program to Convert a Number Decimal System to Binary System using Recursion
*/
#include <stdio.h>
int convert(int);
int main()
{
int dec, bin,reverse_bin,i;
printf("Enter a decimal number: ");
scanf("%d", &dec);
bin = convert(dec);
printf("The binary equivalent of %d is %d.\n", dec, bin);
for (i = 1; i < 9; i++)
{
reverse_bin = bin << 1;
}
printf("The reverse binary of 10 is = %d \n",reverse_bin);
return 0;
}
int convert(int dec)
{
if (dec == 0)
{
return 0;
}
else
{
return (dec % 2 + 10 * convert(dec / 2));
}
}
答案 0 :(得分:0)
您的convert()
函数返回一个整数,当以十进制形式显示时,只包含1和0位数;这是一种转变,而不是转化。这是一个坏主意,数学上存在缺陷,当int
需要32时,仅限于9位数。
事实上,int已经是二进制的,并且将其位直接转换为字符串(正向或反向)更简单,并且更有意义:
#include <stdio.h>
#include <limits.h>
#define INT_BITS (sizeof(int) * CHAR_BIT)
char* binary( char* buffer, int i ) ;
char* binary_reverse( char* buffer, int i ) ;
int main()
{
int dec ;
char binary_str[INT_BITS + 1] ;
printf("Enter a decimal number: ");
scanf("%d", &dec);
printf("The binary of %d is %s.\n", dec, binary( binary_str, dec) ) ;
printf("The reverse binary of %d is %s.\n", dec, binary_reverse( binary_str, dec) );
return 0;
}
char* binary( char* buffer, int i )
{
int b = 0;
for( b = 0; b < INT_BITS; b++ )
{
unsigned mask = 1u << (INT_BITS - b - 1) ;
buffer[b] = (i & mask) == 0 ? '0' : '1' ;
}
buffer[b] = '\0' ;
return buffer ;
}
char* binary_reverse( char* buffer, int i )
{
int b = 0;
for( b = 0; b < INT_BITS; b++ )
{
unsigned mask = 1u << b ;
buffer[b] = (i & mask) == 0 ? '0' : '1' ;
}
buffer[b] = '\0' ;
return buffer ;
}
请注意,binary()
和binary_reverse()
之间的唯一区别是mask
的计算。
答案 1 :(得分:-1)
让您的问题变得困难的原因在于它可能取决于您计算机的字长。简单地说,0001反转为1000或10000000或100000000000000000000000000000?好吧,让我们说它反转为1. :)
如果您同意,那么以下内容应该有效:
int rb(int dec) {
int ret=0;
while (dec) {
if (dec & 1) {
ret<<=1;
ret |=1;
}
else {
ret<<=1;
}
dec>>=1;
}
return ret;
}
哦,是否有目标以递归方式进行?