2017-03-16 1 views
-3

그냥이 링크를 읽으십시오. http://www.mathcs.emory.edu/~cheung/Courses/255/Syllabus/1-C-intro/bit-array.html 저는 128 비트 배열을 만들고 있습니다. 그래서 배열 int A [4]를 사용하고 있습니다. 비트 및 테스트 비트를 설정할 수 있지만 비트를 출력하는 방법은 예를 들어 000001000 .....입니다. 나는비트 배열을 int 배열로 출력하십시오.

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

결과는 내가 읽기 enter image description here

감사 무엇을 찾고 있어요되지 않습니다 인쇄하는 간단한 코드를 사용했다.

+4

돈이 ' 스팸 태그. 이것은 C가 아닙니다. 텍스트의 이미지를 게시하지 마십시오. [mcve]를 제공하십시오. – Olaf

+0

4 개의 int 요소의 배열을 선언하면 인덱스 0 ... 3의 외부 요소를 참조하여 * 정의되지 않은 동작 *을 호출합니다. 코드에서 루프의 과정 동안 124 번 수행합니다. – WhozCraig

+0

@WhozCraig 감사합니다. 그래서 해결할 수있는 방법을 알려줄 수 있습니까? – Van

답변

1

결과를 기준으로 비트를 테스트하고 0 또는 1을 인쇄하십시오.

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

또는 간단 :

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

(이는 적어도 32 비트 폭의 일부 유형의 배열이라고 가정하고, 이상적 uint32_t 것)

1

당신은 몇 불행한 가정하고 있습니다 : 항상 32 비트를

  • int을하지 않는
  • 당신은 4 개 배 int 변수가 아닌 128 배 '1 비트'변수의 배열을

이 같은 것을 선호 :

#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"); 
    } 
} 

출력 :

01101011100010110100010101100111 
00110010011110110010001111000110 
01100100001111001001100001101001 
01100110001100110100100001110011 
관련 문제