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çincevap
unsigned n = 8;
unsigned low8bits = n & 0xFF;
Not bir kaç şey: bit düzeyinde işlemleri için
- , hep
unsigned
türlerini kullanmak - Bit düşük erişmek için
&
operatör - 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 - 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.
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.
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.
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 */
- 1. VHDL - İki 8 bitlik vektörleri 9 bitlik bir vektöre ekleme
- 2. 8 bitlik sembolleri okuyun ve yazın
- 3. Neden std :: ios_base :: ignore() EOF bitini ayarlıyor?
- 4. Java'da iki bitlik tamsayı nasıl değiştirebilirim?
- 5. Hızlı arama/8 bitlik bir dizide eşleşen tek baytların yerine, ARM
- 6. Python'u kullanarak bir dosya için yürütme bitini ayarlama
- 7. GCC ile 32 bitlik bir Oluşturma zorlamasını nasıl zorlayabilirim?
- 8. Snow Leopard için GHC'den 64 bitlik ikili dosyalar nasıl alınır?
- 9. 32 bitlik veri ile wav dosyası nasıl yazılır?
- 10. ubuntu üzerinde haskell 8 nasıl kurulur 16.04
- 11. ios 8'de klavye konumunu nasıl alabilirim ve numberPad üzerinde DONE düğmesine nasıl basın
- 12. Sekiz 6 bitlik birimlerden oluşan 48 bitlik bir dize: her bir birimin orta kısmındaki 4 bitin nasıl hızlı bir şekilde alınacağı
- 13. Nasıl java 8
- 14. Scapy: Tam IP paket başlığını nasıl alabilirim?
- 15. web url'sini nasıl alabilirim
- 16. MKAnnotationView coords nasıl alabilirim?
- 17. Uzantımın kimliğimi nasıl alabilirim?
- 18. Monitör bilgilerini nasıl alabilirim?
- 19. Önceki rotamı nasıl alabilirim?
- 20. phoenix.gen.html'yi nasıl geri alabilirim?
- 21. İşlevin türevini nasıl alabilirim?
- 22. Şerit bilgilerini nasıl alabilirim?
- 23. TextView'de dili nasıl alabilirim?
- 24. Dün NSDate'i nasıl alabilirim?
- 25. İsteğin URL'sini nasıl alabilirim?
- 26. ŞablonUrl'yi $ modalInstance'dan nasıl alabilirim?
- 27. Görünümden Nasıl Parça Alabilirim?
- 28. EditText değişikliğini nasıl alabilirim?
- 29. System.Windows.Controls.Primitive.PopupRoot türünü nasıl alabilirim?
- 30. @DiscriminatorColumn() değerini nasıl alabilirim?
ilk bit '0th' bit veya '1st' bit anlamına mı geliyor? –