Bölüm 1: Bilgisayarlar
Ç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?
sayi = 22, sonuç dizgisi boş başlar.
Koşul doğru. kalan = 22 % 2 = 0 dizginin önüne eklenir → "0"; sayi = 22 / 2 = 11.
Koşul doğru. kalan = 11 % 2 = 1 dizginin önüne eklenir → "10"; sayi = 11 / 2 = 5.
Koşul doğru. kalan = 5 % 2 = 1 dizginin önüne eklenir → "110"; sayi = 5 / 2 = 2.
Koşul doğru. kalan = 2 % 2 = 0 dizginin önüne eklenir → "0110"; sayi = 2 / 2 = 1.
Koşul doğru. kalan = 1 % 2 = 1 dizginin önüne eklenir → "10110"; sayi = 1 / 2 = 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ğrusu3000000000L. - (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:
010sekizlik 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)
Dizginin her harfi bir sayıdır (altta kodları).
charAt(0) = 'K' (75). ch + 3 int verir: 78; (char) ile 'N' olur ve sona eklenir.
charAt(1) = 'e' (101). ch + 3 int verir: 104; (char) ile 'h' olur ve sona eklenir.
charAt(2) = 'd' (100). ch + 3 int verir: 103; (char) ile 'g' olur ve sona eklenir.
charAt(3) = 'i' (105). ch + 3 int verir: 108; (char) ile 'l' olur ve sona eklenir.
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?
Program ve veriler aynı bellekte. PC = 200.
Getir: 200'deki komut IR'ye, PC 201 olur. Çalıştır: bellek[206] = 50 → R1.
Getir: PC önce 202 olur. Çalıştır: JUMP PC'yi 203 yapar; 202'deki ADD hiç çalışmaz.
Getir: PC 204. Çalıştır: ALU 50 − 8 = 42 hesaplar, R1'e yazar.
Getir: PC 205. Çalıştır: R1 = 42 bellek[209]'a yazılır (kontrol yolu: “yaz”).
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.