在int数组中打印出位

时间:2017-03-16 17:43:33

标签: c++

我刚刚阅读此链接http://www.mathcs.emory.edu/~cheung/Courses/255/Syllabus/1-C-intro/bit-array.html 我有一个问题,即制作128位数组,所以我使用数组int A [4]。我可以设置位和测试位但是如何打印出那些位,例如000001000 ......? 我用一个简单的代码来打印它

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

结果不是我想要的 enter image description here

感谢阅读。

2 个答案:

答案 0 :(得分:1)

你做了几个不幸的假设:

  • int并非总是32位
  • 你有一个4x int变量的数组,而不是128x'一位'变量

喜欢这样的事情:

#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

答案 1 :(得分: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);
} 

(所有这些假设A是某种类型的数组,至少32位宽;理想情况下,这将是uint32_t