我想将数字表示为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,而不仅仅是打印。
我怎样才能做到这一点?
答案 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
中了解详情