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 olarak seçilirse, o tabandaki her rakam tam olarak bite karşılık gelir. Bu, dönüşümü hesaplama olmaktan çıkarıp gruplamaya indirger: bitleri ’lık öbeklere ayırmak ve her öbeği tek bir rakamla değiştirmek yeterlidir.
Onluk sistemde bu geçerli değildir, çünkü 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 ’dır. On altı rakam gerekir; onluk
sistemin on simgesi yetmediğinden, kalan altı değer için A–F 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 |
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.
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:
Onluk karşılığını konum değerlerinden hesaplayabilirsiniz:
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 ’dir; rakamlar – arasındadır. olduğundan her sekizlik rakam üç bit taşır ve dönüşüm yine gruplamayla yapılır — bu kez üçerli.
Üç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 üç iznin de verildiğini,
diğer iki rakam 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 seçildiğinde tabanlar arası dönüşüm hesap değil, ’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 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.