我想提取一个十进制数的位.
例如,7是二进制0111,我想获取0 1 1 1所有存储在bool中的位.我怎样才能做到这一点呢?
好的,循环不是一个好的 Select ,我能为这个做点别的吗?
我想提取一个十进制数的位.
例如,7是二进制0111,我想获取0 1 1 1所有存储在bool中的位.我怎样才能做到这一点呢?
好的,循环不是一个好的 Select ,我能为这个做点别的吗?
如果你想要n的第k位,那就做吧
(n & ( 1 << k )) >> k
在这里,我们创建一个掩码,将掩码应用于n,然后右移掩码值以获得我们想要的位.我们可以更完整地写出来:
int mask = 1 << k;
int masked_n = n & mask;
int thebit = masked_n >> k;
您可以阅读更多关于位掩码here的内容.
以下是一个程序:
#include <stdio.h>
#include <stdlib.h>
int *get_bits(int n, int bitswanted){
int *bits = malloc(sizeof(int) * bitswanted);
int k;
for(k=0; k<bitswanted; k++){
int mask = 1 << k;
int masked_n = n & mask;
int thebit = masked_n >> k;
bits[k] = thebit;
}
return bits;
}
int main(){
int n=7;
int bitswanted = 5;
int *bits = get_bits(n, bitswanted);
printf("%d = ", n);
int i;
for(i=bitswanted-1; i>=0;i--){
printf("%d ", bits[i]);
}
printf("\n");
}