#include <stdio.h>
int main()
{
int num, i = 0,pos;
printf(" Enter num \n");
scanf("%d",&num);
for( i = 0; i < 31; i++ )
{
pos = 1 << i;
if ( num & pos )
printf("1");
else
printf("0");
}
printf("\n");
return 0;
}
/*
O/P
Enter Num
12
0011000000000000
*/
但我想将o / p打印为0000000000001100 那么,我必须做出哪些改变才能得到理想的o / p
答案 0 :(得分:1)
您首先打印最不重要的位。将for循环更改为倒计时:
for (int i = 31; i >= 0; i--)
答案 1 :(得分:0)
修改: 似乎我是那个忽视期望输出的人。因此,其他人提供的解决方案将适用于OP。
我很惊讶人们忽略了这样一个事实,即字节序通常适用于字节级而不是位,这使得普通的基于索引的循环无法提供所需的输出。
对于十进制到大端字节,您需要:
while (num)
{
big <<= 8;
big |= num & 0xFF;
num >>= 8;
}
因此,为了将little-endian整数输出到big-endian二进制文件中,您需要:
// 'num' was 4-byte (int) data in little-endian format
while (num)
{
// select required byte block
unsigned char curByte = num & 0xFF;
// prints the byte binaries
for(int iBit=7; iBit>=0; --iBit)
{
unsigned char theBit = curByte >> iBit;
if (theBit & 0x1)
putchar('1');
else
putchar('0');
}
// shifts to next byte block
num >>= 8;
}
答案 2 :(得分:-1)
将for
循环更改为:
#define BIT(x) (1U << (x))
for (i = 31; i >= 0; --i)
{
if (x & BIT(i)) {
putchar('1');
}
else {
putchar('0');
}
}