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
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.
Bayt IntPtr olsun [nasıl] C#...
PHP belirli bir dizin ve tüm alt dizin...
jQuery belirli bir seçenek etiketi met...
Nasıl JUnit4 belirli sırayla test yönt...
.NET - protokol, host, port Olsun...