3.P. Problemler
1. Bizim ortamımızda
#include <stdio.h> int main (void) { short x; printf("%lu %lu\n", (unsigned long)&x, (unsigned long)(&x+1)); printf("%lu %lu\n", (unsigned long)&x, (unsigned long)&x+1); return 0; }
programı
2147480800 2147480802 2147480800 2147480801
sonucunu görüntülemektedir. Tahmin edebileceğiniz gibi, bunlar bellek adresleridir. Neden ilk durumda fark 2 iken, ikinci durumda 1’dir? İlk durumdaki fark ne ifade eder?
2. Eğer makinenizde (işaretli) bir tamsayı üzerinde
yapılan bir sağa kaydırma (>>
) işlemi esnasında boşalan
yerler işaret bitiyle dolduruluyorsa
isaret-doldurma
, aksi takdirde
sifir-doldurma
mesajını verecek bir
program yazınız. Sisteminiz hakkında (sözcük uzunluğu gibi) herhangi bir
varsayım yapmayın.
3. Girilen işaretsiz bir tamsayıda 1 olan bitleri sayan bir program yazınız.
4. Aşağıdaki deyimler ne yapar?
a ^= b; b ^= a; a ^= b;
Açıklayınız. İpucu: Başlangıçta
a
’nın 0077
, b
’nin de
0707
içerdiğini varsayın. Son değerleri ne olacaktır?
5. Zaman da 16 bit içine aşağıdaki gibi paketlenebilir: 5 bit saat, 6 bit dakika, 5 bit saniye. Saniyeleri 5 bite sığdırmak için değeri 2 ile bölün, yani saniyenin en sağındaki biti atın. Bunu yerine getirecek bir program yazın.
6. Aşağıdaki kodun ne işe yaradığını açıklayın:
int i; for (i=0; i<10; i++) printf("%d:%c\n",i,"QWERTYUIOP"[i]);
7. Birçok sistemde unsigned long
en azından 32 bit uzunluğundadır. Bu tipten tanımlanmış
kume1
, kume2
ve kume3
değişkenleri, 0’dan 31’e kadar olan sayı kümelerini
saklayabilecek küme değişkenleri
olarak değerlendirilebilir.
Bu durumda, aşağıdaki küme işlemleri
nin ne anlama geldiğini
açıklayın:
(a) kume1 = kume2 = kume3 = 0; (b) kume1 |= 1<<n; (c) kume2 &= (~1)<<n; (d) if (kume1==kume2) … (e) kume3 = kume1 | kume2; (f) kume2 &= ~kume1; (g) kume1 = kume3^kume2;
8. Kısım 3.4’te verilen örneği çıkarma işlemini de yapacak şekilde geliştirin. İşaretli sonuçları da dikkate almanız gerekecektir.
9. Kısım 3.4’te verilen örneği
dört işlemin tamamını yapacak hale getirin. MAKSR
uzunluğunda iki
sayıyı çarptığınız zaman elde edilecek en büyük sayının uzunluğu nedir?
Tamsayı bölme işlemini nasıl yaparsınız?