Я пытаюсь объединить следующие битовые последовательности в одну переменную, тогда я буду преобразовывать ее в десятичную.
*b1=0b001011;
*b2=0b101010;
*b3=0b0001;
Порядок следования битов должен быть следующим:
newBin = 0001101010001011 (newBin = b3b2b1)
Я попробовал следующий фрагмент кода, но не смог получить правильный десятичный эквивалент.
int combine=(*b1<<16)|(*b2<<10)|*b3;
когда я печатаю комбайн, он дает 4097, но он должен дать 6795.
Буду признателен за любую помощь / предложение.
Важные примечания: я уже пробовал объединить = (* b1 << 12) | (* b2 << 6) | * b3; и объединить = (* b3 << 16) | (* b2 << 10) | * b1; результаты все одинаковы; 4097. </p>
в полной программе я анализирую 32-битное значение. Я использовал код, указанный "указательным пальцем" снизу ссылки.
Как получить побитовые данные из целочисленного значения в C?
Ниже приведен полный код моей версии;
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()
{
long r=0b0010110100111110000010110110101010000001;
int i;
int byte1,byte2,byte3,byte4,byte5;
//int *Lbits,*Mbits,*Hbits;
int bw6=6,bw4=4;
byte1 = (r>>32) & 0xFF;
byte2 = (r>>24) & 0xFF;
byte3 = (r>>16) & 0xFF;
byte4 = (r>>8) & 0xFF;
byte5 = (r>>0) & 0xFF;
int *Lbits=get_bits(byte3,bw6);
int *Mbits=get_bits(byte4,bw6);
int *Hbits=get_bits(byte5,bw4);
int combine=(Hbits<<12)|(&Mbits<<6)|Lbits;
for(i=bw6-1; i>=0;i--)
{
printf("%d", Lbits[i]);
}
printf("\n");
for(i=bw6-1; i>=0;i--)
{
printf("%d", Mbits[i]);
}
printf("\n");
for(i=bw4-1; i>=0;i--)
{
printf("%d", Hbits[i]);
}
printf("\n");
printf("%d",combine);
}