printf("Enter a positive integer");
unsigned int ip;
scanf("%d", &ip);
printf("\n Binary Conversion: ");
int c,k,count = 1;
for(c = 31; c >= 0; c--) {
k = ip >> c;
if(k && 1) {
printf("1");
} else {
printf("0");
}
if(count % 8 == 0) {
printf(" ");
}
count++;
}
由于某些原因,即使我也取消了取消分配,它也没有给我正确的输出。
答案 0 :(得分:0)
你的问题就在这一行:
if(k && 1)
&&
是逻辑 AND运算符,而不是您需要使用的按位 AND运算符。它正在测试的是“如果k和1都非零,则继续”,并且1显然是多余的,因此它正在测试“如果k不为零,则继续”,这将使该语句在许多情况下成立你不想打印1
的地方。
该行应写为:
if(k & 1)
您甚至可以将代码缩短为:
#include <stdio.h>
int main()
{
unsigned int ip;
int i;
printf("Enter a positive integer: ");
scanf("%d", &ip);
printf("\nBinary Conversion: ");
for(i = 31; i >= 0; i--)
{
printf("%d", (ip>>i)&1);
if(i%8==0) printf(" ");
}
return 0;
}
完全避免使用if
/ else
。
答案 1 :(得分:0)
您应该使用%u而不是使用%d。 使用&amp;而不是&amp;&amp;
printf("Enter a positive integer");
unsigned int ip;
scanf("%u", &ip);
printf("\n Binary Conversion: ");
int c,k,count = 1;
for(c = 31; c >= 0; c--) {
k = ip >> c;
if(k & 1) {
printf("1");
} else {
printf("0");
}
if(count % 8 == 0) {
printf(" ");
}
count++;
}