例如,6 => [1,1,0]
答案 0 :(得分:2)
要读取位,您可以使用
char get_bit(unsigned int n, int bit_num){
if (bit_num < 0 || bit_num >= sizeof(int) * CHAR_BIT)
return -1;
return (n >> bit_num) & 1;
};
它的主要问题是它并不快,但OP甚至没有指明他是否想要数字或数字。
答案 1 :(得分:2)
unsigned x = number;
char buf[sizeof(int)*CHAR_BIT+1], *p=buf+sizeof(buf);
for (*--p=0; x; x>>=1) *--p='0'+x%2;
答案 2 :(得分:1)
我不知道,但我会做类似
的事情int[32] bits = {};
int value = 255;
int i = 0;
while (value)
{
bits[i++] = value & 1;
value = value >> 1;
}
答案 3 :(得分:1)
一种简单快捷的方法是使用无符号整数作为“光标”并将其移位以使光标前进:
1000000000000000
0100000000000000
0010000000000000
0001000000000000
0000100000000000
0000010000000000
0000001000000000
0000000100000000
...
在每次迭代时,使用按位&
来查看数字和光标是否共享任何共同位。
一个简单的实现:
// number of bits in an unsigned int
#define BIT_COUNT (CHAR_BIT * sizeof(unsigned int))
void toBits(unsigned int n, int bits[BIT_COUNT])
{
unsigned int cursor = (unsigned int)1 << (BIT_COUNT - 1);
unsigned int i;
for (i = 0; i < BIT_COUNT; i++, cursor >>= 1)
out[i++] = (n & cursor) ? 1 : 0;
}