2017-03-16 1 views
-3

Ich lese gerade diesen Link http://www.mathcs.emory.edu/~cheung/Courses/255/Syllabus/1-C-intro/bit-array.html Ich habe eine Frage, ich mache eine 128-Bit-Array, so dass ich ein Array int A [4]. Ich kann Bit setzen und Bit testen, aber wie man diese Bits ausdruckt, zum Beispiel 000001000 .....? i verwendet, um einen einfachen Code esAusdruck Bit in int-Array

for(int i=0;i<128;i++) 
{ 
cout<<A[i];// i tried cout << static_cast<unsigned int>(A[i]); 
} 

das Ergebnis zu drucken, ist nicht das, was ich suche enter image description here

Danke fürs Lesen.

+4

Don‘ t Spam-Tags. Dies ist nicht C. Und posten Sie keine Bilder von Text. Stellen Sie eine [mcve] bereit. – Olaf

+0

Wenn Sie ein Array mit 4 'int' Elementen deklariert haben, wird durch Verweis auf ein beliebiges Element außerhalb der Indizes 0 ... 3 * undefiniertes Verhalten * aufgerufen, was Ihr Code 124 Mal im Verlauf dieser Schleife tut. – WhozCraig

+0

@WhozCraig Danke, Kannst du mir ein paar Wege erklären, es zu lösen? – Van

Antwort

1

Testen Sie die Bits und drucken Sie 0 oder 1 entsprechend dem Ergebnis.

for(int i=0;i<128;i++) { 
    if((A[i/32]>>(i%32))&1) { 
     cout<<'1'; 
    } else { 
     cout<<'0'; 
    } 
} 

oder einfacher:

for(unsigned i=0; i<128; ++i) { 
    cout << ((A[i/32]>>(i%32))&1); 
} 

(All dies setzt voraus, dass A ist eine Anordnung von einer Art, die mindestens 32 bit breit ist, im Idealfall, die uint32_t wäre)

1

Sie machen ein paar unglückliche Annahmen:

  • Ein int nicht immer 32-Bit-
  • Sie haben eine Reihe von 4x int Variablen, nicht 128x 'Ein-Bit' Variablen

Bevorzugen etwas wie folgt aus:

#include <stdio.h> 
#include <stdlib.h> 
#include <stdint.h> /* uint32_t comes from here */ 

void main(void) { 
    int i, j; 
    uint32_t t; 
    uint32_t data[4]; 

    /* populate the data */ 
    for (i = 0; i < 4; i++) { 
     data[i] = rand(); 
    } 

    /* print out the 'bits' for each of the four 32-bit values */ 
    for (i = 0; i < 4; i++) { 

     t = data[i]; 

     /* print out the 'bits' for _this_ 32-bit value */ 
     for (j = 0; j < (sizeof(data[0]) * 8); j++) { 

      if (t & 0x80000000) { 
       printf("1"); 
      } else { 
       printf("0"); 
      } 

      t <<= 1; 
     } 

     printf("\n"); 
    } 
} 

Ausgabe:

01101011100010110100010101100111 
00110010011110110010001111000110 
01100100001111001001100001101001 
01100110001100110100100001110011