İçeriğe geç
academia.sh

Ders 02 / 16

Onaltılık ve Sekizlik Tabanlar

Bit sınırlarını bozmadan kısa yazım sağlayan onaltılık ve sekizlik gösterimler ve aralarındaki dönüşümler.

İçindekiler

Önceki ders, ikilik gösterimin donanımla birebir örtüştüğünü kurdu. Bu örtüşmenin bedeli uzunluktur: 32 bitlik bir değer, 01000001010000100100001101000100 gibi otuz iki simgelik bir dizidir ve bu diziyi hatasız okumak, yazmak veya karşılaştırmak insan için elverişsizdir.

Bu dersin sorusu şudur: bit yapısını gizlemeden aynı değeri daha az simgeyle nasıl yazabiliriz? Yanıt, taban seçimini ikinin bir kuvvetiyle sınırlamaktan geçer.

Neden İkinin Kuvveti Olan Tabanlar

Taban 2k2^k olarak seçilirse, o tabandaki her rakam tam olarak kk bite karşılık gelir. Bu, dönüşümü hesaplama olmaktan çıkarıp gruplamaya indirger: bitleri kk’lık öbeklere ayırmak ve her öbeği tek bir rakamla değiştirmek yeterlidir.

Onluk sistemde bu geçerli değildir, çünkü 1010 ikinin kuvveti değildir. 4703 sayısının onluk rakamlarına bakarak bit örüntüsü hakkında bir şey söylenemez; dönüşüm için bölme yapmak gerekir. Onaltılık ve sekizlik sistemler bu nedenle tercih edilir: kısalık sağlarlar ve bunu bit sınırlarını bozmadan yaparlar.

Onaltılık Sistem

Onaltılık (hexadecimal) sistemde taban 1616’dır. On altı rakam gerekir; onluk sistemin on simgesi yetmediğinden, kalan altı değer için AF harfleri kullanılır:

Onaltılık Onluk İkilik Onaltılık Onluk İkilik
0 0 0000 8 8 1000
1 1 0001 9 9 1001
2 2 0010 A 10 1010
3 3 0011 B 11 1011
4 4 0100 C 12 1100
5 5 0101 D 13 1101
6 6 0110 E 14 1110
7 7 0111 F 15 1111

16=2416 = 2^4 olduğundan her onaltılık rakam tam olarak dört bit taşır. Dört bitlik gruba yarım bayt (nibble) denir. Bir bayt sekiz bit, yani iki yarım bayttır; dolayısıyla her bayt tam olarak iki onaltılık rakamla yazılır. Bu, onaltılık gösterimin yaygın kullanımının asıl nedenidir: bayt sınırları gösterimde görünür kalır.

Harflerin büyük veya küçük yazılması değeri değiştirmez; 0xFF ile 0xff aynı değeri gösterir. Bir metinde tutarlılık için tek bir biçim seçilir.

Gruplayarak Dönüşüm

İkilikten onaltılığa geçmek için bitler sağdan başlayarak dörderli gruplanır ve her grup tablodaki karşılığıyla değiştirilir. Soldaki son grup dörtten az bit içeriyorsa başına sıfır eklenir.

01004 00011 01004 00102 01004 00113 01004 01004\underbrace{0100}_{4}\ \underbrace{0001}_{1}\ \underbrace{0100}_{4}\ \underbrace{0010}_{2}\ \underbrace{0100}_{4}\ \underbrace{0011}_{3}\ \underbrace{0100}_{4}\ \underbrace{0100}_{4}

Otuz iki bitlik dizi, sekiz onaltılık rakama iner: 41424344. Ters yön aynı kuralın tersidir: her onaltılık rakam dört bitle değiştirilir.

Sağdan gruplamak önemlidir. Soldan gruplanırsa, bit sayısı dördün katı değilken tüm konum değerleri kayar ve sonuç yanlış çıkar.

Kursun Ortak Örneği

Yukarıda elde edilen değer, bu kurs boyunca tekrar tekrar başvurulacak örnektir:

0x41424344\texttt{0x41424344}

Onluk karşılığını konum değerlerinden hesaplayabilirsiniz:

4×167+1×166+4×165+2×164+4×163+3×162+4×161+4×160=1.094.861.6364 \times 16^7 + 1 \times 16^6 + 4 \times 16^5 + 2 \times 16^4 + 4 \times 16^3 + 3 \times 16^2 + 4 \times 16^1 + 4 \times 16^0 = 1.094.861.636

Bu, 32 bitlik örüntünün işaretsiz tam sayı olarak yorumudur. Aynı örüntü sonraki derslerde başka türlü de yorumlanacak: işaretli bir tam sayı, bir gerçel sayı, dört harflik bir metin parçası ve bellekteki bayt sırasına göre farklı görünen bir dizi olarak. Bit örüntüsü tüm bu okumalarda aynı kalır; değişen tek şey, ona uygulanan yorum kuralıdır.

Bu ayrım, verinin doğası hakkında dersin taşıdığı asıl fikirdir: bellekte “sayı” veya “metin” diye bir şey yoktur; bit örüntüleri ve onlara uygulanan yorumlar vardır.

Sekizlik Sistem

Sekizlik (octal) sistemde taban 88’dir; rakamlar 0077 arasındadır. 8=238 = 2^3 olduğundan her sekizlik rakam üç bit taşır ve dönüşüm yine gruplamayla yapılır — bu kez üçerli.

1117 1015 1015=7558\underbrace{111}_{7}\ \underbrace{101}_{5}\ \underbrace{101}_{5} = 755_8

Üçlü gruplama bayt sınırıyla hizalanmadığı için sekizlik gösterim genel amaçlı kullanımda onaltılığın gerisinde kalır: 8 bit, üçerli gruplandığında iki tam rakam ve artan iki bit verir.

Sekizliğin sürdüğü yer, doğal birimi üç bit olan alanlardır. Unix türevi sistemlerde dosya izinleri bunun standart örneğidir: okuma, yazma ve çalıştırma izinleri üç bitlik bir grup oluşturur ve bu grup sahip, grup ve diğerleri için ayrı ayrı tekrarlanır. 755 yazımı, rwxr-xr-x iznini kodlar; ilk rakam 7=11127 = 111_2 üç iznin de verildiğini, diğer iki rakam 5=10125 = 101_2 yazma izninin kapalı olduğunu söyler. İzin modeli, Linux müfredatında ayrıntılı ele alınır.

Yazım Sözleşmeleri

Bir sayının hangi tabanda yazıldığı, metinde olduğu gibi kodda da belirtilmelidir. Yaygın önekler:

Önek Taban Örnek Değer
0b 2 0b1011 11
0o 8 0o755 493
0x 16 0x1F 31
(yok) 10 31 31

Önekler sayının değerinin parçası değildir; yalnızca okunacak tabanı bildirirler. Aynı değer dört farklı biçimde yazıldığında bellekte aynı bit örüntüsü oluşur.

Aşağıdaki program dönüşümleri ve biçimlendirmeyi gösterir:

deger = 0x41424344

print(deger)                      # 1094861636
print(hex(deger))                 # 0x41424344
print(bin(deger))                 # 0b1000001010000100100001101000100
print(f"{deger:#010x}")           # 0x41424344  (en az 8 rakam, önekli)
print(f"{deger:032b}")            # 01000001010000100100001101000100

# Bayt bayt okuma: her bayt iki onaltılık rakamdır.
for kaydirma in (24, 16, 8, 0):
    bayt = (deger >> kaydirma) & 0xFF
    print(f"{bayt:#04x}", bayt)   # 0x41 65 / 0x42 66 / 0x43 67 / 0x44 68

bin çıktısının 32 değil 31 basamak olması dikkat çekicidir: yerleşik işlev baştaki sıfırları yazmaz. Sabit genişlikli gösterim gerektiğinde biçimlendirme belirteci (032b, #010x) kullanılır. Sabit genişlik, bellek içeriği incelenirken sütunların hizalı kalması için gereklidir.

Döngüdeki >> ve & işleçleri, örüntüden belirli bir baytı ayıklar; bu işleçlerin tanımları bit düzeyi işlemler dersinde verilecektir.

Özet

  • Taban 2k2^k seçildiğinde tabanlar arası dönüşüm hesap değil, kk’lık gruplama işidir.
  • Onaltılık sistemde her rakam dört bit, dolayısıyla her bayt tam olarak iki rakamdır; bayt sınırları gösterimde görünür kalır.
  • İkilikten onaltılığa geçerken gruplama sağdan başlar; eksik kalan sol grup sıfırla tamamlanır.
  • Sekizlik sistemde her rakam üç bittir; bayt sınırıyla hizalanmadığı için kullanımı üç bitlik doğal alanlarla (örneğin dosya izinleri) sınırlıdır.
  • 0b, 0o, 0x önekleri değeri değil, okunacak tabanı bildirir.
  • Kursun ortak örneği 0x41424344, işaretsiz yorumda 1.094.861.6361.094.861.636 değerindedir.

Sonraki Adım

Buraya kadar bütün sayılar negatif olmayan kabul edildi. Oysa donanımda eksi işareti tutacak ayrı bir yer yoktur; işaret de bit örüntüsünün içinde kodlanmalıdır. Sonraki ders, bunun nasıl yapıldığını ve seçilen yöntemin toplama devresini neden değiştirmediğini ele alacak.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat