나는

2011-01-05 2 views
0
#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 

*/ 

는하지만 0000000000001100 그래서, 내가 만든에 변경 사항을 무엇으로 변경 원하는 O/P에게나는

+0

혹시 당신은이 질문으로 주위를 어지럽 혔습니까? http : //stackoverflow.com/questions/4597940/how-to-insert-zeros-between-bits-in-a-bitmap - 그게 대체 for 루프를 가지고 있었던 이유입니다. ... –

답변

-1

를 얻기 위해 오/피를 인쇄 할 빅 엔디안 형식으로 출력을 얻고 당신의 for 루프는 다음과 같습니다.

#define BIT(x) (1U << (x)) 

for (i = 31; i >= 0; --i) 
{ 
    if (x & BIT(i)) { 
     putchar('1'); 
    } 
    else { 
     putchar('0'); 
    } 

} 
+0

@YeenFei : 질문이 바이트 순서 엔디안에 대해 이야기하는 것 같지 않습니다. 'int'에서 비트의 인쇄물. –

+0

예. 나는 그것을 지금 깨달았다. – YeenFei

1

가장 중요한 비트가 먼저 인쇄됩니다. 카운트 다운 당신을위한 루프를 변경합니다

 for (int i = 31; i >= 0; i--) 
0

편집 : 내가 원하는 출력을 간과하는 사람이 있음을 보인다. 따라서 다른 사람들이 제공 한 솔루션이 OP를 위해 작동합니다.


나는 놀랄 사람들이 엔디 언은 일반적으로 일반 인덱스 기반 루프가 필요한 출력을 제공하는 데 실패 할 대신 비트의 바이트 수준, 적용된다는 사실을 간과입니다. 빅 엔디안 바이트 10 진수에 대한

다음이 필요합니다

while (num) 
{ 
    big <<= 8; 
    big |= num & 0xFF; 
    num >>= 8; 
} 

그래서 빅 엔디안 바이너리로 출력 리틀 엔디안 정수하기 위해, 다음이 필요합니다

// '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; 
} 
+1

나는 OP가 int의 바이너리 표현을 왼쪽에서 가장 중요한 비트로, 왼쪽에서 가장 중요하지 않게 인쇄하고 싶다고 확신한다. 그의 질문이 끝날 때 그의 모범을보십시오. –