SORU
12 ŞUBAT 2010, Cuma


nasıl c tamsayı bit veri tarafından ısırılmak mı?

Bir ondalık bit yok ayıklamak istiyorum.

Örnek 7 için ikili bir 0111 0 1 1 1 almak istiyorum, tüm bit bool saklanan nasıl yapabilirim?

TAMAM, bir döngü iyi bir seçenek değil, bir şey için başka ne yapabilirim?

CEVAP
12 ŞUBAT 2010, Cuma


Eğer n k-inci bit istiyorsan, yap

(n & ( 1 << k )) >> k

Burada bir maske oluşturuyoruz, n maske uygulayın ve sonra sağ maskeli değeri istediğimiz sadece biraz almak için shift. Daha tam olarak yazmak.

    int mask =  1 << k;
    int masked_n = n & mask;
    int thebit = masked_n >> k;

Hakkında daha fazla bit maskeleme buradan okuyabilirsiniz: http://en.wikipedia.org/wiki/Mask_(computing)

Burada bir program:

#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");
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jana Williams

    Jana William

    17 AĞUSTOS 2011
  • KSI

    KSI

    25 Temmuz 2009
  • pucksz

    pucksz

    24 Mart 2006