2 u014332462 u014332462 于 2015.06.09 11:32 提问

for里面的printf是怎么执行的

/*把一个十进制数以二进制输出*/
#include

int main(void)
{
const int bit = sizeof(int) * 8; //判断整型有多少位
unsigned int bak = 1 << bit-1; //一个数只有第一位为1,其余全为0
int num;
int i;

printf("请输入一个数:");
scanf("%d", &num);

for(i = 1; i <= bit; ++i)
{
/*  if(num & bak)        //相与的结果只有0或者不是0,不是0则输出字符1
    {
        printf("%c", '1');
    }
    else
    {
        printf("%c", '0');
    }
    bak = bak >> 1;      //每一次把bak右移一位
*/
    printf("%c", num < 0 ? '1' : '0');
    num <<= 1;  
}
printf("\n");

return 0;

}

8个回答

caozhy
caozhy   Ds   Rxr 2015.06.09 11:52

10进制转2进制,
每次除以2,输出余数,将余数反过来就是结果,举例:
123
123 % 2 = 1
123 /2 = 61
61 % 2 = 1
61 / 2 = 30
30 % 2 = 0
30 / 2 = 15
15 % 2 = 1
15 / 2 = 7
7 % 2 = 1
7 / 2 = 3
3 % 2 = 1
3 / 2 = 1
1 % 2 = 1
1 / 2 = 0
所以结果(从下往上列出余数)1111011

fcxxxer
fcxxxer   2015.06.09 13:26

void print_2(int val2)
{
unsigned char p = (unsigned char)&val2 + 3; //从低位到高位,低端字节计算机
for(int k = 0; k <= 3; k++)
{
int val2 = *(p-k);
for (int i = 7; i >= 0; i--)
{
if(val2 & (1 << i))
printf("1");
else
printf("0");
}
printf(" ");
}
}

crazy852456
crazy852456   2015.06.09 13:40

printf("%c", num < 0 ? '1' : '0'); 表示如果num<0就输出字符'1',否则就输出字符'2'

crazy852456
crazy852456   2015.06.09 13:42

打错了 是表示如果num<0就输出字符'1',否则就输出字符'0'

sxjiangdongqin
sxjiangdongqin   2015.06.09 21:47

回车表示从缓存中提交数据到程序,空格只是隔开数据。你输入3,空格,此时数据并没提交到程序中,3还在缓存中,所以不执行printf。

lzp_lrp
lzp_lrp   Ds   Rxr 2015.06.10 08:54

这是一个十进制转二进制的经典例子

老曹的答案太牛了,赞一下

frank_20080215
frank_20080215   2015.06.09 12:40

scanf("%d", &num);改成scanf("%s", &num);
int i= strlen(num);
int x = atoi(num);
printf("%o", x);

zbcpgy
zbcpgy   2015.06.09 12:33

61 / 2 = 30
30 % 2 = 0
30 / 2 = 15
15 % 2 = 1
15 / 2 = 7
7 % 2 = 1
7 / 2 = 3
3 % 2 = 1

Csdn user default icon
上传中...
上传图片
插入图片