---
title: 'Onaltılık ve Sekizlik Tabanlar'
source: 'https://academia.sh/tr/kurslar/bilgisayarlar-nasil-calisir/onaltilik-ve-sekizlik-tabanlar'
course: 'Bilgisayarlar Nasıl Çalışır'
language: tr
updated: '2026-08-17T18:08:11+00:00'
license: 'CC BY-SA 4.0'
---

# 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.

Ö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 $2^k$ olarak seçilirse, o tabandaki her rakam tam olarak $k$ bite karşılık gelir.
Bu, dönüşümü hesaplama olmaktan çıkarıp gruplamaya indirger: bitleri $k$'lık öbeklere
ayırmak ve her öbeği tek bir rakamla değiştirmek yeterlidir.

Onluk sistemde bu geçerli değildir, çünkü $10$ 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 $16$'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 |

$16 = 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.

$$
\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:

$$
\texttt{0x41424344}
$$

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

$$
4 \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 $8$'dir; rakamlar $0$–$7$ arasındadır. $8 = 2^3$
olduğundan her sekizlik rakam üç bit taşır ve dönüşüm yine gruplamayla yapılır — bu kez
üçerli.

$$
\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 = 111_2$ üç iznin de verildiğini,
diğer iki rakam $5 = 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:

```python
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 $2^k$ seçildiğinde tabanlar arası dönüşüm hesap değil, $k$'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.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.
