2011-01-05 76 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 

*/ 

但我想打印的O/P爲0000000000001100 那麼,什麼變化,我必須作出獲得所需的O/P我越來越大端格式輸出

+0

以任何機會你只是亂搞這個問題:http://stackoverflow.com/questions/4597940/how-to-insert-zeros-between-bits-in-a-bitmap - 這就是爲什麼我有一個替代'for'循環只是躺在... – 2011-01-05 05:44:13

回答

-1

更改for loop更像:

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

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

} 
+0

@YeenFei:我不認爲這個問題是在談論字節順序排列順序 - 只是位順序他在「int」中打印輸出位。 – 2011-01-05 06:20:03

+0

是的。我現在意識到了。 – YeenFei 2011-01-05 06:28:20

1

您正在打印最不重要的位。改變你的for循環倒計時:

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

編輯: 看來,我是一個誰忽視期望輸出的一個。所以其他人提供的解決方案將適用於OP。


我很驚訝人們忽視的是字節序通常適用於字節級,而不是位,使普通指數型環不能提供所需的輸出的事實。

一個小數big-endian字節,你需要:

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的二進制表示,最左邊的是最重要的位,左邊是最不重要的位。看他的問題結尾處的例子。 – 2011-01-05 06:18:17