我想从十进制数中获取位对(例如75 - > 0b01001011)并将它们保存在单独的变量中。因此,对于75,我期望获得具有1,0,2,3个值的四个变量。我正在寻找最佳性能解决方案。
这是我的测试:
uint16_t k,kk,kkk,kkkk;
unsigned char a,b,c,d;
k=kk=kkk=kkkk = 75;
a = k & ~(0b11111100);
b = (kk & ~(0b11110011)) >> 2 ;
c = (kkk & ~(0b11001111)) >> 4;
d = (kkkk & ~(0b00111111)) >> 6;
您能找到更好更快的解决方案吗?我的意思是,这个解决方案的缺点是,我必须创建原始变量的副本,因为每次设置a,b,c,d变量之一时它都会被更改。
答案 0 :(得分:0)
这种方法是cca 4xfaster:
uint16_t k;
unsigned char a,b,c,d;
k = 75;
a = k & 0b11;
b = (k & 0b1100) >> 2 ;
c = (k & 0b110000) >> 4;
d = (k & 0b11000000) >> 6;