Bölüm 1: Bilgisayarlar

Bölüm 1: Bilgisayarlar · Çalışma Soruları
Temel parçalarTaban dönüşümleriİkiye tümlemeTaşmaKayan noktachar ve ASCIIUnicode ve UTF-8Saklanan programvon Neumann
Sercan KÜLCÜ

Çoktan Seçmeli · Bilgisayarın Temelleri

Soru 1: Temel Parçalar

Bir bilgisayarın temel parçalarıyla ilgili hangisi doğrudur?

B: İşlemci hesaplar (ALU, kontrol birimi, yazmaçlar); RAM çalışan programı ve verisini geçici olarak tutar, elektrik kesilince silinir. Disk büyük, yavaş ve kalıcıdır: mutfak benzetmesindeki kiler. A rolleri ters çevirir; C diski önbellekle karıştırır; D diskin kalıcılığını yok sayar.

Çıktı Sorusu · Sayılar

Soru 2: Taban Dönüşümleri

Program ne yazdırır?

System.out.println(Integer.toBinaryString(45));
System.out.println(Integer.toHexString(171));
System.out.println(Integer.parseInt("777", 8));
System.out.println(0x1F + 010);
Cevabı göster
101101
ab
511
39

45 = 32 + 8 + 4 + 1 → 101101. 171 = 10·16 + 11 → ab (toHexString küçük harf yazar).

777₈ = 7·64 + 7·8 + 7 = 511. 0x1F = 31, 010 başta sıfır olduğu için sekizlidir: 8 → 31 + 8 = 39.

Adım Adım Çalıştırma · Sayılar

Soru 3: Ondalıktan İkiliye: 22

Kod 22 için ne yazdırır? Döngü kaç tur döner?

ikili:sayi:22

sayi = 22, sonuç dizgisi boş başlar.

ikili:0sayi:11

Koşul doğru. kalan = 22 % 2 = 0 dizginin önüne eklenir → "0"; sayi = 22 / 2 = 11.

ikili:10sayi:5

Koşul doğru. kalan = 11 % 2 = 1 dizginin önüne eklenir → "10"; sayi = 11 / 2 = 5.

ikili:110sayi:2

Koşul doğru. kalan = 5 % 2 = 1 dizginin önüne eklenir → "110"; sayi = 5 / 2 = 2.

ikili:0110sayi:1

Koşul doğru. kalan = 2 % 2 = 0 dizginin önüne eklenir → "0110"; sayi = 2 / 2 = 1.

ikili:10110sayi:0

Koşul doğru. kalan = 1 % 2 = 1 dizginin önüne eklenir → "10110"; sayi = 1 / 2 = 0.

ikili:10110sayi:0

0 > 0 yanlış, döngü biter. 22 = 16 + 4 + 2 → 10110. Kalan önce eklendiği için bitler doğru sırada durur.

int sayi = 22;
String ikili = "";
while (sayi > 0) {
    int kalan = sayi % 2;
    ikili = kalan + ikili;
    sayi = sayi / 2;
}
System.out.println(ikili);

Çoktan Seçmeli · Sayılar

Soru 4: −20 İkiye Tümlemede

−20 sayısının 8 bitlik ikiye tümleme gösterimi hangisidir?

D: 20 = 00010100 → bitler ters çevrilir: 11101011 (B, birler tümleyeni) → 1 eklenir: 11101100. Sağlama: 11101100 işaretsiz 236 = 256 − 20. A yalnızca işaret bitini 1 yapar (işaret-büyüklük gösterimi); C +20'dir.

Çıktı Sorusu · Sayılar

Soru 5: Taşma

Program ne yazdırır?

byte b = 126;
b++;
b++;
System.out.println(b);
int m = Integer.MAX_VALUE;
System.out.println(m + 2);
short s = (short) 40000;
System.out.println(s);
System.out.println((byte) 0b10110110);
Cevabı göster
-128
-2147483647
-25536
-74

byte en fazla 127'dir: 126 → 127 → −128 (başa sarar). MAX_VALUE + 2 = −2147483648 + 1.

40000, 16 bitlik short'a sığmaz: 40000 − 65536 = −25536. 10110110₂ = 182; en soldaki bit 1 → 182 − 256 = −74. Java taşmada hata vermez.

Çoktan Seçmeli · Sayılar

Soru 6: 0.1 + 0.2 == 0.3

System.out.println(0.1 + 0.2 == 0.3); satırı için hangisi doğrudur?

A: 0.1 ikili tabanda 0.000110011…₂ diye sonsuz tekrar eder; 52 bitlik kesre sığdırılırken yuvarlanır. Toplam 0.30000000000000004 olur. Kod derlenir (C yanlış); Java'da 0.1 sabiti double'dır (D yanlış). Karşılaştırma için Math.abs(a - b) < 1e-9 kullanılır.

Hata Bulma · Sayılar

Soru 7: Hangi Satır Derlenmez?

Her satır ayrı bir programda deneniyor. Hangileri derlenmez, neden? Derlenen satırda z kaçtır?

byte b = 200;            // (1)
long x = 3000000000;     // (2)
char c = "A";            // (3)
int y = 08;              // (4)
int z = 010;             // (5)
Cevabı göster
  • (1) possible lossy conversion from int to byte: byte en fazla 127.
  • (2) integer number too large: sabit int sayılır; doğrusu 3000000000L.
  • (3) String cannot be converted to char: karakter tek tırnakla yazılır, 'A'.
  • (4) ';' expected: başta 0 sekizlik demektir, sekizlikte 8 rakamı yoktur.
  • (5) derlenir: 010 sekizlik 10 = 8.

Çıktı Sorusu · Harf ve Dizgiler

Soru 8: char Aritmetiği

Program ne yazdırır? ('A' = 65, 'a' = 97, '0' = 48)

char c = 'C';
c += 2;
System.out.println(c);
System.out.println(c + 1);
System.out.println((char) (c + 1));
System.out.println('7' - '0');
System.out.println("" + 'a' + 'b');
System.out.println('a' + 'b');
Cevabı göster
E
70
F
7
ab
195

c += 2 char'ı iki harf ilerletir: C → E. c + 1 int verir (69 + 1 = 70); karaktere dönmek için (char) gerekir.

'7' - '0' = 55 − 48 = 7. Boş dizgiyle başlayınca + birleştirir ("ab"); iki char ise sayı olarak toplanır: 97 + 98 = 195.

Çoktan Seçmeli · Harf ve Dizgiler

Soru 9: UTF-8 Bayt Sayısı

Kod hangi iki sayıyı yazdırır?

String k = "çiğdem";
System.out.println(k.length() + " "
    + k.getBytes(StandardCharsets.UTF_8).length);

C: length() char sayısıdır: ç-i-ğ-d-e-m = 6. UTF-8'de ASCII harfleri 1, ç (U+00E7) ve ğ (U+011F) 2'şer bayttır: 4 + 2 + 2 = 8. D her karakteri 2 bayt sayar (UTF-16 gibi); A her harfi 1 bayt sanır.

Adım Adım Çalıştırma · Harf ve Dizgiler

Soru 10: Harfleri Kaydırmak

Program ne yazdırır? ('K' = 75, 'e' = 101, 'd' = 100, 'i' = 105)

kelimeK75e101d100i105sonuc

Dizginin her harfi bir sayıdır (altta kodları).

kelimeK75e101d100i105sonucN78

charAt(0) = 'K' (75). ch + 3 int verir: 78; (char) ile 'N' olur ve sona eklenir.

kelimeK75e101d100i105sonucN78h104

charAt(1) = 'e' (101). ch + 3 int verir: 104; (char) ile 'h' olur ve sona eklenir.

kelimeK75e101d100i105sonucN78h104g103

charAt(2) = 'd' (100). ch + 3 int verir: 103; (char) ile 'g' olur ve sona eklenir.

kelimeK75e101d100i105sonucN78h104g103l108

charAt(3) = 'i' (105). ch + 3 int verir: 108; (char) ile 'l' olur ve sona eklenir.

kelimeK75e101d100i105sonucN78h104g103l108

i = 4 < 4 yanlış, döngü biter: Nhgl. Her harf alfabede 3 ileri kaydı (Sezar şifresi).

String kelime = "Kedi";
String sonuc = "";
for (int i = 0; i < kelime.length(); i++) {
    char ch = kelime.charAt(i);
    int kod = ch + 3;
    sonuc = sonuc + (char) kod;
}
System.out.println(sonuc);

Çıktı Sorusu · Harf ve Dizgiler

Soru 11: Emoji ve length()

Program ne yazdırır? (€ = U+20AC, 😀 = U+1F600)

String s = "A€😀";
System.out.println(s.length());
System.out.println(
    s.codePointCount(0, s.length()));
System.out.println(
    s.getBytes(StandardCharsets.UTF_8).length);
Cevabı göster
4
3
8

Java String'i UTF-16 tutar: A ve € birer char, U+FFFF'in üstündeki 😀 iki char (vekil çift) → length() = 4.

Kod noktası 3 tanedir. UTF-8 baytları: A 1, € 3 (U+0800–U+FFFF), 😀 4 → 8.

Çıktı Sorusu · Yapılandırılmış Bilgi

Soru 12: Bir Resim Kaç Bayt?

800 × 600 piksellik, piksel başına 3 bayt (R, G, B) kullanan sıkıştırmasız bir resim için program ne yazdırır?

long piksel = 800L * 600;
long bayt = piksel * 3;
System.out.println(bayt);
System.out.println(bayt / 1024 + " KiB");
int yanlis = 100000 * 100000;
System.out.println(yanlis);
long dogru = 100000L * 100000;
System.out.println(dogru);
Cevabı göster
1440000
1406 KiB
1410065408
10000000000

800 · 600 = 480 000 piksel, × 3 = 1 440 000 bayt; 1 440 000 / 1024 = 1406 (tam sayı bölmesi, kesir atılır).

100000 · 100000 = 10¹⁰ int'e sığmaz; 2³²'ye göre kalan 1410065408 yazılır, hata yoktur. 100000L çarpımı long yapar.

Çoktan Seçmeli · Saklanan Program

Soru 13: Bellek Hiyerarşisi

Erişim hızına göre en hızlıdan en yavaşa doğru sıralama hangisidir?

A: Yazmaçlar işlemcinin içindedir ve en hızlısıdır; L1, L2 (ve L3) önbellekler işlemciye yakın, küçük ve hızlıdır; RAM büyük ama daha yavaş, disk en büyük ve en yavaştır. D aynı sırayı tersten verir. Hız arttıkça boyut küçülür, maliyet artar.

Çoktan Seçmeli · Saklanan Program

Soru 14: Adres Yolu

Bir işlemcinin adres yolu 16 hatlıdır ve her adres bir bayt seçer. En fazla kaç bayt bellek adreslenebilir?

C: 16 hat 2¹⁶ = 65 536 farklı adres seçer: 64 KiB. B 2¹⁵'tir; D 32 hatlı yolun sınırıdır (2³² bayt). Veri yolu değeri taşır, kontrol yolu “oku/yaz” bilgisini.

Adım Adım Çalıştırma · Saklanan Program

Soru 15: Atlamalı Oyuncak Program

Oyuncak bilgisayar 200. adresten başlıyor ([x]: x adresindeki değer). Program bitince bellek[209]'da ne vardır, PC kaçtır?

PC200IR—R10502062520782080209bellek (veri)

Program ve veriler aynı bellekte. PC = 200.

PC201IRLOAD 206R150502062520782080209bellek (veri)

Getir: 200'deki komut IR'ye, PC 201 olur. Çalıştır: bellek[206] = 50 → R1.

PC203IRJUMP 203R150502062520782080209bellek (veri)

Getir: PC önce 202 olur. Çalıştır: JUMP PC'yi 203 yapar; 202'deki ADD hiç çalışmaz.

PC204IRSUB 208R142502062520782080209bellek (veri)

Getir: PC 204. Çalıştır: ALU 50 − 8 = 42 hesaplar, R1'e yazar.

PC205IRSTORE 209R1425020625207820842209bellek (veri)

Getir: PC 205. Çalıştır: R1 = 42 bellek[209]'a yazılır (kontrol yolu: “yaz”).

PC206IRHALTR1425020625207820842209bellek (veri)

Getir: PC 206. HALT: işlemci durur. bellek[209] = 42, PC = 206.

200: LOAD  R1, [206]   ; R1 ← [206]
201: JUMP  203         ; PC ← 203
202: ADD   R1, [207]   ; R1 ← R1 + [207]
203: SUB   R1, [208]   ; R1 ← R1 − [208]
204: STORE R1, [209]   ; [209] ← R1
205: HALT              ; dur
206: 50
207: 25
208: 8
209: 0

Çoktan Seçmeli · von Neumann Mimarisi

Soru 16: von Neumann ve Harvard

von Neumann mimarisini Harvard mimarisinden ayıran özellik hangisidir?

D: Saklanan program fikrinde komut da veri de sayıdır ve aynı bellekte, aynı veri yolundan taşınır; bu tek yol von Neumann darboğazını doğurur. Harvard mimarisinde (ör. AVR mikrodenetleyiciler) komut ve veri belleği ayrıdır. C, ENIAC'ın elle kablolanmasıdır.

Kod Okuma · von Neumann Mimarisi

Soru 17: Komut Kodlama

Oyuncak bilgisayarda 8 bitlik komut: 2 bit işlem kodu (00 topla, 01 çıkar, 10 çarp, 11 böl), 2 bit hedef, 2'şer bit iki kaynak yazmaç. (a) Kod ne yazdırır? (b) 01101110 ne yapar? (c) “R2 ← R3 × R1” komutu nasıl kodlanır?

int komut = 0b01101110;
System.out.println(komut);
System.out.println(komut / 64 + " "
    + (komut / 16) % 4 + " "
    + (komut / 4) % 4 + " " + komut % 4);
Cevabı göster
110
1 2 3 2

(a) 01101110₂ = 64 + 32 + 8 + 4 + 2 = 110. 110 / 64 = 1; 110 / 16 = 6, 6 % 4 = 2; 110 / 4 = 27, 27 % 4 = 3; 110 % 4 = 2.

(b) 01 = çıkar, hedef R2, kaynaklar R3 ve R2: R2 ← R3 − R2.

(c) 10 · 10 · 11 · 01 → 10101101 (= 173).

Çoktan Seçmeli · von Neumann Mimarisi

Soru 18: Bytecode Taşınabilirliği

Windows'ta javac ile derlenen Merhaba.class dosyası Linux'a kopyalanıp java Merhaba ile çalıştırılıyor. Ne olur?

B: javac kaynak kodu işlemciye değil JVM'e özgü bytecode'a çevirir. Her platformdaki JVM bu bytecode'u yorumlar ya da JIT ile makine koduna çevirir: “bir kez yaz, her yerde çalıştır”. A ve C bytecode'u makine koduyla karıştırır.

Son

Bölüm 1: Bilgisayarlar: Çalışma Soruları
Konu anlatımı: Bilgisayarlar sunumu · Terim sözlüğü
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.