/*把一个十进制数以二进制输出*/
#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;
}
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
61 / 2 = 30
30 % 2 = 0
30 / 2 = 15
15 % 2 = 1
15 / 2 = 7
7 % 2 = 1
7 / 2 = 3
3 % 2 = 1
scanf("%d", &num);改成scanf("%s", &num);
int i= strlen(num);
int x = atoi(num);
printf("%o", x);
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(" ");
}
}
printf("%c", num < 0 ? '1' : '0'); 表示如果num<0就输出字符'1',否则就输出字符'2'
打错了 是表示如果num<0就输出字符'1',否则就输出字符'0'
回车表示从缓存中提交数据到程序,空格只是隔开数据。你输入3,空格,此时数据并没提交到程序中,3还在缓存中,所以不执行printf。
这是一个十进制转二进制的经典例子
老曹的答案太牛了,赞一下