如何将数字表示为15位宽的字段?

时间:2017-03-11 16:41:54

标签: c io bit-manipulation field bit

我想将数字表示为15位宽的字段。 所以,例如:

Number        15 bit wide filed representation of the number
 0            000000000000000 /*15 bits*/

'a'           000000001100001 /*15 bits*/

'b'           000000001100010 /*15 bits*/

 4            000000000000100 /*15 bits*/

如果数字可以用较小的位表示,则在它之前会有0。 我正在考虑比特字段,但是当我尝试这样做时:

#include <stdio.h>
int main()
{
    typedef struct 
    {
        int a : 15;
    }A;
    A b;
    b.a = 0;
   printf("a is %d \n",a.b); 
   return 0;
}

我得到了这个输出:

0

而不是:

000000000000000

但是,我并不是在谈论打印一个数字(我对%15或类似的东西不感兴趣)。我希望在我执行的任何操作中,可以用较少的位数表示任何数字之前的0,而不仅仅是打印。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

你必须单独检查每一位,如下所示:

#include <stdio.h>

#define WIDTH 15

// print the m-th bit (m from 1..16 or 32) of n
void print_bit(n, m)
{
    printf("%d", n & (1 << (m - 1)));
}

typedef struct
{
    int a : WIDTH;
} A;

int main()
{
    A b;
    b.a = 0;

    int i;
    for(i = 1; i <= WIDTH; ++i)
        print_bit(b.a, i);
    return 0;
}

输出:

Georgioss-MacBook-Pro:~ gsamaras$ gcc -Wall main.c 
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out 
000000000000000

How do I print one bit?

中了解详情