SORU
31 Ocak 2011, PAZARTESİ


Bayt belirli bir bit olsun

Bir bayt, özellikle ben UDP başka bir cihazdan gönderilen yoluyla gelen bayt dizisi gelen bayt. Bu bayt cihaza 8 röle durumu off/depolar.

Nasıl dedi bayt belirli bir bit değerinin elde edebilirim? İdeal bir uzantısı yöntemi en şık görünecektir ve bir bool dönen bana mantıklı olurdu.

public static bool GetBit(this byte b, int bitNumber)
{
    //black magic goes here
}

CEVAP
31 Ocak 2011, PAZARTESİ


Kolay. Ucuza bit kaydırma ile hesaplanabilir hangi tür VE değeri ile sayısı 2^bitNumber karşılaştırmak için kullanın.

//your black magic
var bit = (b & (1 << bitNumber-1)) != 0;

DÜZENLEME:Açıklama ile benzer bir çok sorunun yanıtını orada yok çünkü biraz daha ayrıntı eklemek için:

Bir bit karşılaştırır VE her sayı, bit-by-bit, kullanılması VE katılmak için üretmek bir dizi kombinasyonu parçaları nerede hem ilk kısım ve ikinci kısım içinde yer ayarlayın. Burada bir" bit çalışma gösteren VE: . "nibble mantık matris VE mantık

  0101
& 0011
  ----
  0001 //Only the last bit is set, because only the last bit of both summands were set

Senin durumunda, bir göz istiyorum sadece bit olan bir sayı ile geçtin numarasını karşılaştırın. Hadi dördüncü bit arıyorsun ki:

  11010010
& 00001000
  --------
  00000000 //== 0, so the bit is not set

  11011010
& 00001000
  --------
  00001000 //!= 0, so the bit is set

Bit kaydırma üretmeye numarasını istiyoruz karşılaştırın karşı, tam olarak ne gibi sesler: al numarasını, temsil gibi bir set parçaları ve shift bitleri sağa veya sola belirli bir sayıda yerleştirir. Çünkü bu ikili sayılar ve bit kadar her biri büyük bir güç-of-iki kişi hakkını, bit kaydırma sola eşdeğerdir iki katına numarasını bir kere her yerde olduğu değiştirdi, eşdeğer çarparak sayısına göre 2^x. Örnek, dördüncü bit arıyor, yapıyoruz:

       1 (2^0) << (4-1) ==        8 (2^3)
00000001       << (4-1) == 00001000

Şimdi nasıl yapıldığını, düşük düzeyde neler olduğunu ve neden çalıştığını biliyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DorkmanScott

    DorkmanScott

    14 NİSAN 2006
  • lane182videos

    lane182video

    6 EKİM 2011
  • bored before i even began

    bored before

    30 Mart 2009