Bit Alanı Paketleyici Hesaplama

Tek bir tam sayıya paketlemek için her değeri ve bit genişliğini girin.

Nasıl hesaplanır?

Negatif olmayan en fazla üç tam sayı, tek bir tam sayının içine yan yana yerleştirilir; 1. alan en yüksek bitlerde, 3. alan en düşük bitlerdedir: paket = (v1 << (w2 + w3)) | (v2 << w3) | v3. Her w o alana ayrılan bit sayısıdır ve her değer 2w değerinden küçük olmalıdır, aksi halde sonuç çıkmaz. 3. alan isteğe bağlıdır: boş bırakılırsa hem değeri hem genişliği 0 sayılır. Ondalıklar tam sayıya kesilir; negatif değer ya da genişlik sonuç vermez. Genişliklerin toplamı 1 ile 63 bit arasında olmalıdır. Paketlenmiş sonuç onluk, on altılık ve toplam genişliğe sıfırla tamamlanmış ikilik tabanda gösterilir.

Örnek hesaplama

Bu, 16 bitlik bir piksel için RGB565 düzenidir: 5 bitte kırmızı 21, 6 bitte yeşil 42, 5 bitte mavi 10. Toplam genişlik: 5 + 6 + 5 = 16 bit. Kırmızı 6 + 5 = 11 bit sola kayar (21 × 2048 = 43.008). Yeşil 5 bit sola kayar (42 × 32 = 1.344). Mavi 10 olarak kalır. Toplam: 43.008 + 1.344 + 10 = 44.362. Araç paketlenmiş değeri üç biçimde, her satırda bir tane gösterir (onluk, on altılık, ikilik): 44.362 0xAD4A 0b1010110101001010

Bu örneği dene →

Sık yapılan hatalar

  • Genişliğine sığmayan bir değer girmek. 5 bitlik alan 0 ile 31 arasını tutar; 32 sonuç vermez, alanı genişletin ya da değeri kontrol edin.
  • 1. alanın en düşük bitlerde olacağını sanmak. 1. alan en anlamlı kısımdır; ekrandaki alan sırası yüksek bitten aşağıya doğru sıradır.
  • Genişlik yerine alana sığan en büyük değeri yazmak (5 yerine 31). Genişlik bit sayısıdır, sığabilen en büyük sayı değildir.
  • Ondalık ya da negatif sayıları işaretli değer gibi girmek. Kesirler kesilir, negatifler reddedilir; bu yüzden ikiye tümleyenli alanlar önce işaretsiz değere çevrilmelidir.
  • 64 bitlik yazmaca paketlerken 63 bit sınırını unutmak. Toplam genişlik en fazla 63'tür; kullanılmayan alanları genişlik 0 ve değer 0 olarak bırakın.

Bu hesaplama hakkında

Bir bit alanı (bit field), birkaç küçük tam sayı değerini, daha büyük tek bir tam sayı içinde bitişik bit gruplarına paketler; böylece tek bir 32 bit veya 64 bit sözcük, örneğin 5 bitlik bir değeri, 8 bitlik bir değeri ve 3 bitlik bir değeri her biri için ayrı bir değişken — ve ayrı bellek — kullanmak yerine aynı anda barındırabilir. Bu hesaplayıcı, bit genişlikleriyle birlikte üç adede kadar değeri alır, her birini kendi konumuna kaydırır, OR işlemiyle birleştirir ve sonucu onluk, on altılık ve ikilik olarak gösterir.

Bit alanı paketleme, düşük seviye programlamada her yerde karşımıza çıkar: mikrodenetleyicilerdeki donanım çevre birimi yapılandırma yazmaçları belirli bit aralıklarını belirli ayarlara atar; ağ protokolü başlıkları (IPv4’ün sürüm/IHL baytı veya TCP bayrakları gibi) yükü en aza indirmek için birden çok alanı birkaç bayta paketler ve RGB565 gibi grafik biçimleri kırmızı, yeşil ve mavi kanalları tek bir 16 bitlik piksel değerinde paketler. Gömülü sistem ve sürücü geliştiricileri, donanım yazmaçlarını doğru okuyup yazmak için tam olarak bu tür bir paketleme kullanır.

Bu faydalı oldu mu?

En fazla 3 tepki seçebilirsiniz.

Yorumlar (1)

  • Editör ekibi

    Bir veri sayfasından yazmaç değeri oluştururken en üstten başlayın. Buradaki 1. alan en yüksek bitlere yerleşir; bu yüzden veri sayfasındaki alanları en anlamlı bitten aşağı doğru sıralayın. Sonda boş kalan alan için genişliğe 0 yazın. Yazmacın ortasında ayrılmış (reserved) bitler varsa onları da kontrol edin: araçta bunlar için ayrı bir yer yoktur, değeri 0 olan bir alan olarak ekleyin. Hangi yazmacı ya da protokol başlığını paketliyorsunuz?

Popüler hesaplayıcılar

Tüm Hesaplayıcılar