[英]Integer to Binary in C
我是 C 编程的新手,不确定我的程序有什么问题。 我正在编写一个程序,它将 integer 作为输入并以二进制形式返回。
输入 43 将是 output 101011,但 output 是 1。
请指教。
#include <stdio.h>
#include <string.h>
void printBinaryForm( int X )
//Purpose: Print parameter X in binary form
//Output: Binary representation of X directly printed
//Assumption: X is non-negative (i.e. >= 0)
{
//[TODO] CHANGE this to your solution.
int input = X;
char output[] = "";
char binary1 = '1';
char binary2 = '0';
while(input != 0){
if(input%2 != 0){
input = input - 1;
strncat(output, &binary1, 1);
}
else{
input /= 2;
strncat(output, &binary2, 1);
}
}
printf("%s",output);
}
int main(void)
{
int X;
printf("Enter X: ");
scanf("%d",&X);
//print X in binary form
printBinaryForm( X );
return 0;
}
对于 integer 个值,右移相当于除以二。 因此,您可以简单地通过右移并评估 memory 中的结果位是1
还是0
并输出适当的字符'1'
或'0'
来创建二进制表示。 一个简单的 function 是:
/** unpadded binary representation of 'v'. */
void binprn (const unsigned long v)
{
if (!v) {
putchar ('0');
return;
};
size_t sz = sizeof v * CHAR_BIT; /* get total bits in type */
unsigned long rem = 0;
while (sz--) /* loop sz number of times */
if ((rem = v >> sz)) /* while digits remain */
putchar ((rem & 1) ? '1' : '0'); /* output '1' or '0' */
/* note: the caller is responsible for adding the '\n' */
}
然后结合您的main()
并添加输入验证,您可以执行以下操作:
#include <stdio.h>
#include <limits.h>
/** unpadded binary representation of 'v'. */
void binprn (const unsigned long v)
{
if (!v) {
putchar ('0');
return;
};
size_t sz = sizeof v * CHAR_BIT; /* get total bits in type */
unsigned long rem = 0;
while (sz--) /* loop sz number of times */
if ((rem = v >> sz)) /* while digits remain */
putchar ((rem & 1) ? '1' : '0'); /* output '1' or '0' */
/* note: the caller is responsible for adding the '\n' */
}
int main (void) {
int x;
fputs ("enter x: ", stdout); /* prompt for integer */
if (scanf ("%d", &x) != 1) { /* read/validate user-input */
fputs ("error: invalid integer.\n", stderr);
return 1;
}
binprn (x); /* output binary represntation of x */
putchar ('\n'); /* tidy up with newline */
}
(注意:调用者负责换行控制。在某些情况下,您可能希望 output 在输出'\n'
之前将数字的多个二进制表示放在一起,以便将任务留给调用者 function 来执行)
示例使用/输出
$ ./bin/binprn
enter x: 255
11111111
要么
$ ./bin/binprn
enter x: 127
1111111
要么
$ ./bin/binprn
enter x: 43690
1010101010101010
您还可以将逻辑调整为 output 填充表示为 X 位数(4、8、16、32、64 等...)
检查一下,如果您还有其他问题,请告诉我。
我是 C 编程的新手,不确定我的程序有什么问题。 我正在编写一个程序,它将 integer 作为输入并以二进制形式返回。
输入 43 将 output 101011,但 output 为 1。
请指教。
#include <stdio.h>
#include <string.h>
void printBinaryForm( int X )
//Purpose: Print parameter X in binary form
//Output: Binary representation of X directly printed
//Assumption: X is non-negative (i.e. >= 0)
{
//[TODO] CHANGE this to your solution.
int input = X;
char output[] = "";
char binary1 = '1';
char binary2 = '0';
while(input != 0){
if(input%2 != 0){
input = input - 1;
strncat(output, &binary1, 1);
}
else{
input /= 2;
strncat(output, &binary2, 1);
}
}
printf("%s",output);
}
int main(void)
{
int X;
printf("Enter X: ");
scanf("%d",&X);
//print X in binary form
printBinaryForm( X );
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.