2010-07-17 13 views
19

Bir int değişkenim n = 8 olduğumu söyleyelim. Çoğu makinede bu 32 bitlik bir değer olacaktır. Bunun sadece alt bitlerini (en düşük bayt) ikili olarak nasıl alabilirim? Ayrıca ne olduğunu öğrenmek için her bir bitime nasıl erişebilirim? Sorum düşük 8 bit maskesini CInt'ın 8 bitlik bitini nasıl alabilirim?

için

cevap

30
unsigned n = 8; 
unsigned low8bits = n & 0xFF; 

Not bir kaç şey: bit düzeyinde işlemleri için

  1. , hep unsigned türlerini kullanmak
  2. Bit düşük erişmek için & operatör
  3. ile ikili maskeleme kullanarak sayılar elde edilebilir 8 bit maskesi 0xFF çünkü ikili olarak düşük 8 bit açık ve geri kalan 0
  4. Sayının düşük 8 biti 8, 8

Bir sayının belli bir bit erişmek için (bir an için bunu düşünmek) ... olan k inci bit ki: Şimdi

unsigned n = ...; 
unsigned kthbit = (1 << k) & n; 

, kthbit olacak 0 n ait k inci bit 0 ve n ait k inci bit 1.

15

kullanın bit düzeyinde aritmetik ilgilidir:

unsigned char c = (x & 0xFF); 

n'inci en düşük bit erişmek için, denklem (x & (1 << n)) olan (sıfır n en önemsiz biti gösterir) . Sıfır sonucu, bitin temiz olduğunu ve sıfır değerinin bitin ayarlandığını gösterir.

2

Sen yapamam ise bazı olumlu numarası (2**k) ise Belirli bir bit yani < < ve & kullanılarak bir dizi ayarlanmış est edin: dördüncü bitinin ayarlanmış olup olmadığını

if (num & (1<<3)) ...

test eder.

Benzer bir şekilde, sadece en düşük 8 bit yani num & 255 veya num & 0xFF (onaltılı) ayarlandığı bir dizi ile & kullanarak sadece (bir tam sayı olarak) en 8 bit çıkarmak.

7

En iyi yol, & bit mantıksal işlecini uygun değerle kullanmaktır. Alt 8 bit Yani

:

n & 0xFF; /* 0xFF == all the lower 8 bits set */ 

Ya

Genel bir kural olarak:

n & ((1<<8)-1) /* generate 0x100 then subtract 1, thus 0xFF */ 

belirli bir bit almak için biraz kaydırma operatörü ile birleştirebilirsiniz:

(n & (1<<3))>>3; 
    /* will give the value of the 3rd bit - note the >>3 is just to make the value either 0, or 1, not 0 or non-0 */ 
+0

ilk bit '0th' bit veya '1st' bit anlamına mı geliyor? –

İlgili konular