Forum: Ders Arası RSS
Çift yollu otoban! (.sizeof, size_t, vs.)
64 bit derleme...
Sayfa:  önceki  1  2 
acehreli (Moderatör) #16
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 5310
Salih Dinçer:
Ama ne iyi olmaz mıydı; "overload" olayının değişkenler üzerinde de uygulanabilmesi. Tabi şablon olayları ile çözebiliriz ki hocam bunu belirtmiş.

İşlev yükleme (overloading) de derleme zamanında halledildiği için değişken değerlerini de derleme zamanında seçebiliriz. Örneğin şu programdaki S yapısı her tür ile kullanılabiliyor ama herhangi bir nedene bağlı olarak içindeki dizinin eleman adedini o türe göre farklı seçebiliyor:

import std.stdio;
 
template UygunAdet(T)
{
    static if (T.sizeof <= 2) {
        enum size_t UygunAdet = 10;
 
    } else {
        enum size_t UygunAdet = 500;
    }
}
 
struct S(T)
{
    T[UygunAdet!T] elemanlar;
}
 
void main()
{
    S!byte sb;
    S!int  si;
 
    writeln(sb.elemanlar.length);
    writeln(si.elemanlar.length);
}

Çıktısı:

10
500


Değerlerin yüklenmeleri çalışma zamanı çok şekilliliğinde (polymorphism) bulunmaz. O gibi durumlarda üst sınıf alt sınıfın o değeri sunmasını talep edebilir:

import std.stdio;
 
class ÜstSınıf
{
    void birAlgoritma()
    {
        writeln("Alt sınıftan öğrendiğim veri: ", özelVeri());
    }
 
    // Bunun tanımını burada veremiyoruz; alt sınıfların
    // sorumluluğuna bırakıyoruz.
    abstract int özelVeri();
}
 
class BirAltSınıf : ÜstSınıf
{
    override int özelVeri()
    {
        return 42;
    }
}
 
class BaşkaAltSınıf : ÜstSınıf
{
    override int özelVeri()
    {
        return 43;
    }
}
 
void main()
{
    ÜstSınıf[] nesneler;
    nesneler ~= new BirAltSınıf;
    nesneler ~= new BaşkaAltSınıf;
 
    foreach (nesne; nesneler) {
        nesne.birAlgoritma();
    }
}

Çıktısı:

Alt sınıftan öğrendiğim veri: 42
Alt sınıftan öğrendiğim veri: 43


Ali
zafer #17
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 5307
Salih detaylı ve güzel açıklama için teşekkür ederim. Ancak sanırım senin başını biraz daha fazla ağrıtacağım. Önceki mesajlarımda da belirttiğim gibi bu konularda gerçekten tecrübem yok. Kodları anlıyorum ama kavramak zor oluyor. Senin yazdığın maddeler üzerinden sırası ile aklıma takılanları yazayım. Cevaplarsan sevinirim.

Salih Dinçer on 2012-03-18, 01:48:
1. satır:İşlevin dönüş değer int olduğu için bu türe yerleştiriyoruz. Belki işaretli bir değer olduğu için yanlış yapıyor olabilirim. Ancak ihtiyacım olan bir kopyasını almaktı çünkü onu ilerleyen satılarda değiştirip (her seferinde ikiye bölüp) etkin bir şekilde kullanacağız.

Şimdi bu noktada aklıma takılan sorular var. öncelikle size_t olayından başlayalım. Ali şöyle demiş;

Sonuçta şöyle karar verilmiş: programın derlendiği sisteme uygun bir tür seçelim ve onun adına size_t diyelim. Program adet ve indeks gibi kavramları temsil ederken hep size_t yazarsa hiçbir yerde sorun kalmaz.

Ayrıca bu türün işaretsiz bir tür olduğunu da garantileyelim. Yoksa programcı örneğin 64 bitlik bir sistemde belleğin uzunluğunu bile söyleyemez. 64 bitlik sistemde 2 üzeri 64 adet adres bulunabildiğine göre size_t'yi long seçsek yalnızca yarısını söyleyebiliriz.

Dolayısıyla bitBul() metodundaki arananBitler değişkeninin değeri uint veya ulong tipinden biri olmak durumunda, bu durumda örneğin 2_148_000_000 gibi bir sayi ile "int uzunluk = cast(int)arananBitler;" işlemini yaparsak ne olur? Böyle bir sayi gelir mi bilmiyorum tabi. Ayrıca madem int'e çevireceksek neden parametreyide int almayalım? Engel nedir?

Diğer bir konu ise uzunluk değerini neden ikiye bölüyoruz. Ayrıca uzunluk biraz kapalı bir isimlendirme olmuş sanırım, tam olarak kimdir bu uzunluk?

Maskeleme
Bazı kütüphanelerde ve sistemlerde belirli bir tamsayı değer içine birden fazla bilgi yerleştirilmiş olabilir. Örneğin 32 bitlik bir değerin üst 3 bitinin belirli bir anlamı ve alt 29 bitinin başka bir anlamı bulunabilir. Bu veriler maskeleme yöntemiyle birbirlerinden ayrılabilirler.

Son olarak yukarıda maskeleme işlemi ile ilgili açıklamaya dikkat çekmek istiyorum. Görüldüğü üzere maske işlemi aslında uzun bir değerin içindeki farklı değerleri ayırştırmak için kullanılıyor. Oysa bizim int, short, veya long tipindeki verilerimizin tüm bitleri bu tip için ayrılmış değil midir? Yani int tipinde bir değişkende 32 bitin tamamı o int değeri için ayrılmış olmaz mı? Dolayısıyla bu maskeleme ile bizim yapmak istediğimiz tam olarak nedir?
https://github.com/zafer06 - depo
Avatar
Salih Dinçer #18
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Tersten yanıtlayayım:

3-Maskelemeyi yapmamızın ana nedeni arama sonucunun doğru çıkması. Çünkü biz bitler üzerinden işlem yapıyoruz. Zaten byte gibi değeri sabit olan verimiz olsaydı eşit aralıklarda bir şeyi aramak daha kolay olurdu. Eğer aradığımız 0b1001 gibi 4 bitlik bir değer ise ve biz bunun sol bölümünü (MSB) silmezsek bu durumda 0b1001_1001 gibi bir değeri atlamış oluruz.

2-Ali hocamın bit işlem üzerine yazdığı harika dersi ara sıra okursan sanırım aklındaki bir çok soru kendiliğinden giderilecek. Çünkü orada da sağ kaydırmanın tam sayı cinsinden ikiye bölmek demek olduğu belirtilmiş. Yani biz matematiksel işlem yapmaktan çok bitleri teker teker dışarıya öteleyerek sayım gerçekleştiriyoruz.

1-Aslında bu bölümün esnek olması gerekir mi emin değilim. Yani en büyük değeri alıp tüm tür dönüştürme ve seçme işlemlerinden uzaklaşabiliriz. Kodu yazarken örneğin 4 bitlik veriyi 64 bit üzerinden aktarmak anlamsız gelmişti. O yüzden böyle değişkenler arasında bir seçimlilik (overloading) yapmak iyi olabilir.
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
zafer #19
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ben tekrar düzgün sırada devam edeyim :)

3 -> 1. Tamam ve şu soruyu sormak zorundayım. Biz eğer 0b_1001 (9) gibi 4 bit bir veri arıyorsak neden kafa mekanizması veri şeridinden her defasında 4 bit okumuyor. Bunu engelleyen nedir?

Senin önceki mesajlarından da aklımda kalanları toplarlamak gerekirse ben veriyi 1 ve 0'lardan oluşan uzun bir şerit gibi düşünmüştüm kafa ise bizim istediğimiz ölçülerde genişleyen veya daralan bir kol diye aklımda kaldı. Yani kolu 4 birim genişlige ayarlarsam kol şeritde her temas ettiğinde 4 biti alıp getirebilen bir yapı diye düşünüyordum. Yanlış düşünüyor olabilirim bu konuda yeni olduğumu söylemiştim :)

Senin anlattığından ise kolun sabit bir genişlikte olduğunu örneğin 8 birim ve her defasında bu kadar bilgiyi aldığımızı ve daha azına ihtiyaç duyduğumuz zamanlarda ise fazlasını atmamız gerektiğini anlıyorum.

Peki benim dediğim şekilde yapılma imkanı yok mu? Sanki bu daha doğal geliyor. Bu arada sanırım MSB kısaltması Most Significant Bit demek oluyor bunun yerine EYB desek daha güzel olmaz mı?

2 -> 2. Tamam şimdi anladım ikiye bölme olayını, ama neyi saydığımızı anlamadım  :-/ Ali'nin bit işlemleri bölümünü okuyorum zaten dikkat ettiysen "Maskeleme" ile ilgili yazı o bölümden alınma.

1 -> 3. Bence buradaki sorun esneklik veya en büyük değer sorunu değil. Bu bence biraz daha farklı bir durum.Yani  bana şu sebzelerden gönderirsen sana salata yaparım deyip, sonra çorba yapmaya benziyor  :-D Biraz tuhaf bir benzetme oldu farkındayım :)

Yani neticede böyle gerekiyorsa böyle kalsın, ben detayı hala tam anlamadım sadece böyle bir şey olduğunu söylemek istedim.
https://github.com/zafer06 - depo
Avatar
Salih Dinçer #20
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
zafer:
Biz eğer 0b_1001 (9) gibi 4 bit bir veri arıyorsak neden kafa mekanizması veri şeridinden her defasında 4 bit okumuyor. Bunu engelleyen nedir?
Çünkü biz bit'leri arıyoruz nibble (4 bit) genişliğindeki değerleri değil. Bu konuda Turing Machine konusunu araştırmanı öneririm. Sanırım hemen sadeliğin güzelliğini keşfedeceksin...

zafer:
Senin önceki mesajlarından da aklımda kalanları toplarlamak gerekirse ben veriyi 1 ve 0'lardan oluşan uzun bir şerit gibi düşünmüştüm kafa ise bizim istediğimiz ölçülerde genişleyen veya daralan bir kol diye aklımda kaldı. Yani kolu 4 birim genişlige ayarlarsam kol şeritde her temas ettiğinde 4 biti alıp getirebilen bir yapı diye düşünüyordum. Yanlış düşünüyor olabilirim bu konuda yeni olduğumu söylemiştim :)
Bence doğru düşünüyorsun...:)

zafer:
Senin anlattığından ise kolun sabit bir genişlikte olduğunu örneğin 8 birim ve her defasında bu kadar bilgiyi aldığımızı ve daha azına ihtiyaç duyduğumuz zamanlarda ise fazlasını atmamız gerektiğini anlıyorum.
Şimdi doğal olarak işleyebileceğimiz en küçük veri byte olduğu için mecburen fazlasını atmamız gerekiyor. Yoksa önceki iletimde bahsettiğim gibi aradığımız değeri bulamayabiliriz.

zafer:
Peki benim dediğim şekilde yapılma imkanı yok mu? Sanki bu daha doğal geliyor.
Senin dediğin şekilde çalışan bir kod örneği gösterebilir misin?

zafer:
Bu arada sanırım MSB kısaltması Most Significant Bit demek oluyor bunun yerine EYB desek daha güzel olmaz mı?
Eğer EYB diye kısaltma kullansaydım muhtemelen bunun ne anlama geldiğini bulman çok vakit alacaktı...:)
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
zafer #21
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Öncelikle sorularımı sabırla cevapladığın için teşekkür ederim Salih, umarım seni sıkmıyorumdur.

Salih Dinçer:
Çünkü biz bit'leri arıyoruz nibble (4 bit) genişliğindeki değerleri değil.

Bu cevabı hiç anlamadım. Tamam bitlerin içinde arama yapıyoruz ama örneğin 0b_1001 gibi bir değeri aramak için 4 bitten oluşan bir kümeyi aramamız gerekmez mi? Aksi taktirde neyle neyi eşleştirecez?

Senin dediğin şekilde çalışan bir kod örneği gösterebilir misin?

Böyle bir kod gösteremem, çünkü daha yazmadım  :-D Neyse şaka bir tarafa madem bitleri işleyemiyoruz neden o zaman bit isimli bir tip (tür) tanımlamıyoruz. Böyle bir tip (tür) tanımlayıp işlemleri bunun üzerinden yapmak daha doğal olmaz mı?

Diyeli ki böyle bir tip tanımlayamıyoruz. O zaman veri şeridinin bir izdüşümünü bizim çalışabileceğimiz bir tip ile ifade etsek olmaz mı?

Örneğin şöyle bir veri olsun 0b_1001_1001, yine örneğin bunu bir bool dizisine çevirsek bu dizinin 8 elemanı olucak ve 1 yenine true, 0 yerine false değerleri içerecek, yani bizim bit şeridimizin bir izdüşümü haline gelecek şimdi bu bildiğimiz dizi yapısı üzerinden istediğimiz uzunlukta veri okuyamaz mıyız? Alt düzey konuları tam olarak bilmediğim için soruyorum yanlış anlaşılmasın.

Eğer EYB diye kısaltma kullansaydım muhtemelen bunun ne anlama geldiğini bulman çok vakit alacaktı...:)

MSB'yi bulmamda vaktimi aldı. Ancak EYB kullansaydın büyük ihtimal bu kısaltmanın çok kullanılmadığı için bilinemeyeceğinide tahmin eder ve nezaket icabı parantez içine açıklamasınıda yazardın (Arama süresi = 0) :)

Seni seviyoruz Salih.
https://github.com/zafer06 - depo
Avatar
Salih Dinçer #22
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
zafer:
Öncelikle sorularımı sabırla cevapladığın için teşekkür ederim Salih, umarım seni sıkmıyorumdur.
Aksine her sabah soracağın soruları sabırsızlıkla bekliyorum. Ama sanki bu sefer ki biraz gecikti...:)

zafer:
...örneğin 0b_1001 gibi bir değeri aramak için 4 bitten oluşan bir kümeyi aramamız gerekmez mi? Aksi taktirde neyle neyi eşleştirecez?
O zaman şöyle söyleyeyim; bizim 2 bit de olsa 7 bitte, tek tek (bit bit) diziyi tarayarak eşleştirme yapmamız icab eder. Yoksa dörtlü (nybble) kümeler halinde tararsak tıpkı birdirbir oynarmış gibi atladığımız arkadaşlarımız (bitler) olur.

zafer:
Böyle bir kod gösteremem, çünkü daha yazmadım  :-D Neyse şaka bir tarafa madem bitleri işleyemiyoruz neden o zaman bit isimli bir tip (tür) tanımlamıyoruz. Böyle bir tip (tür) tanımlayıp işlemleri bunun üzerinden yapmak daha doğal olmaz mı?
Ben de bir soru sorayım: "Artık yazmanın zamanı gelmedi mi?" Yani bu kadar cevaba rağmen artık kodlardan konuşmalıyız. Çünkü böylesi daha öğretici olur. Mesela şu yazma olayını artık yapalım...

bitYaz(ubyte offset, ubyte pattern) için notlar:
  • pattern'nin uzunluğunu hesapla
  • offset'in 8'e bölümünden kalan (offset % 8) kaç?
  • kalan > pattern'nin uzunluğundan büyükse, o zaman iki byte'lık işlem yapılacak
  • pattern sonraki byte'a taşmadıysa, uzunluğa göre mask'ı oluştur (Ali'nin maskeYap işlevi)
  • taştıysa ilk maske'nin değilini (invert) al ve ikinci bir mask oluştur
  • mask'lara göre byte'ları değiştir

zafer:
Salih Dinçer:
Eğer EYB diye kısaltma kullansaydım muhtemelen bunun ne anlama geldiğini bulman çok vakit alacaktı...:)
MSB'yi bulmamda vaktimi aldı. Ancak EYB kullansaydın büyük ihtimal bu kısaltmanın çok kullanılmadığı için bilinemeyeceğinide tahmin eder ve nezaket icabı parantez içine açıklamasınıda yazardın (Arama süresi = 0) :)

Seni seviyoruz Salih.
MSB şeklinde açıklamasız yazmamın sana daha çok faydası olmuştur, aramaya inan...:)

Ben de sizleri seviyorum, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Bu mesaj Salih Dinçer tarafından değiştirildi; zaman: 2012-03-20, 09:18.
acehreli (Moderatör) #23
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Salih Dinçer:
zafer:
...örneğin 0b_1001 gibi bir değeri aramak için 4 bitten oluşan bir kümeyi aramamız gerekmez mi? Aksi taktirde neyle neyi eşleştirecez?
O zaman şöyle söyleyeyim; bizim 2 bit de olsa 7 bitte, tek tek (bit bit) diziyi tarayarak eşleştirme yapmamız icab eder. Yoksa dörtlü (nybble) kümeler halinde tararsak tıpkı birdirbir oynarmış gibi atladığımız arkadaşlarımız (bitler) olur.

Sanırım Zafer'i anlıyorum: Eğer dört bit arıyorsak dört bitlik bir maske yaparız ve bu maskeyi birer bit kaydıra kaydıra aradığımız değeri ortaya çıkartıp çıkartmadığına bakabiliriz. Böyle düşününce maskeyi kafa olarak görüyoruz. Yani aranan genişlik genişliğinde bir kafa oluyor.

Ali
Avatar
Salih Dinçer #24
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Eğer dört bit arıyorsak dört bitlik bir maske yaparız ve bu maskeyi birer bit kaydıra kaydıra aradığımız değeri ortaya çıkartıp çıkartmadığına bakabiliriz.
Aslında bizim burada kullandığımız iki maske var ve maskeYap() işlevinden gelen odaklanmayı sağlayan sanal bir şey, bir nevi C64'lerdeki kafa ayarı gibi...:)

Diğer maskemiz (bitTest mask) ise yoklayıcı ve değişken bir şey. Yani her kaydırma işleminde (veri üzerindeki gezinmede) bize yeni bir bit'e odaklanmayı sağlıyor. Aslında gezinen kafa (xHead) ama maske ile doğru yerde olup olmadığımızı anlıyoruz. En iyisi kodlarla konuşmaya devam edelim ve kodun sadeleştirilmiş son halini izleniminize sunayım:
immutable bl = ubyte.sizeof * 8;   // bit length (ubyte => 8)
immutable lb = 2^^(bl - 1);        // last bit (ubyte => 128)
 
int bitBul(ubyte xBit, ubyte[] xData) {
    ubyte xHead, xSay = xBit;
    for(int i = 0; i <= 8; ++i, xSay >>= 1) if(xSay == 0) {
        for(int bs = 0; bs < (xData.length * bl); ++bs, xHead <<= 1) {
            if((xData[bs / bl] & (lb >> bs % bl)) != 0) xHead |= 1;
            xHead &= maskeYap(0, i);
            if(xHead == xBit) return bs - i + 1; // Aranılan bitlerin başladığı yer (+1)
        }
    }
    return -1;
}
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
Salih Dinçer #25
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Kusura bakmayın, sadeleştireyim derken zorlaştırmış olabilirim...:)

Standart hale sokarsak:
Salih Dinçer:
immutable bl = ubyte.sizeof * 8;   // bit length (ubyte => 8)
immutable lb = 2^^(bl - 1);        // last bit (ubyte => 128)
 
int bitBul(ubyte xBit, ubyte[] xData)
{
    ubyte xHead;
    ubyte xSay = xBit;
 
    for(int i = 0; i <= 8; i++)
    {
        xSay >>= 1;
 
        if(xSay == 0)
        {
            for(int bs = 0; bs < (xData.length * bl); bs++)
            {
                xHead <<= 1;
 
                if((xData[bs / bl] & (lb >> bs % bl)) != 0)
                {
                    xHead |= 1;
                }
 
                xHead &= maskeYap(0, i);
 
                if(xHead == xBit)
                {
                    return bs - i + 1; // Aranılan bitlerin başladığı yer (+1)
                }
            }
        }
    }
 
    return -1;
}
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
zafer #26
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #22
Salih Dinçer:
Aksine her sabah soracağın soruları sabırsızlıkla bekliyorum. Ama sanki bu sefer ki biraz gecikti...:)

Mümkün olduğunca her sabah bakıyorum ama bazen işlerin yoğunluğundan sadece okumakla yetiniyorum. Ben sorular kadar cevaplarında çok değerli olduğunu bildiğim için özenle ve vakit ayırarak yazmaya ve her cevabımı daha da geliştirmeye gayret ediyorum. Bu durumda cevap yazma olayı biraz zamanımı alıyor. Zaman buldukça yazıyorum :)


O zaman şöyle söyleyeyim; bizim 2 bit de olsa 7 bitte, tek tek (bit bit) diziyi tarayarak eşleştirme yapmamız icab eder. Yoksa dörtlü (nybble) kümeler halinde tararsak tıpkı birdirbir oynarmış gibi atladığımız arkadaşlarımız (bitler) olur.

Gerçi Ali anlatmak isteiğimi kendi mesajında belirtmiş ama kısaca tekrar etmek gerekirse. Kafayı her defasında birer bit kaydırarak okuma yaparsak sanırım hiç bir biti atlamayız.

Diğer taraftan uzun zamandır birdirbir oynamadım ama hatırladığım kadarıyla sırası gelen her oyuncu diğerlerinin üzerinden atlıyor ve sonra eğiliyordu. Dolayısıyla her oyuncu herkesin üzerinden atlamış oluyordu. Bu vesile ile bu oyunu hatırlattığın için teşekkürler Salih :) keyifli bir oyundu.

Ben de bir soru sorayım: "Artık yazmanın zamanı gelmedi mi?"

Aslında bir önceki mesajımı yazarken aynı soruyu bende kendime sormuştum. Yaklaşık iki sayfadır yazıyoruz. Sonra biraz düşündüm örneğin fibonacci sayılarını listeyen bir kod yazmak çok zor değil en kötüsü defalarca deneme yanılma ile bu kod bir şekilde yine yazılabilir. Ama mühim olan gerçekten bu kodun yazılması mıdır?

Bence HAYIR, mühim olan bu kodun bize gösterdiği özyinelemeli metotların işleyişini anlamak olmalıdır. Neyse uzatmadan bir fikri düşünce zemininde tartışmadan sadece kodlar üzerinden bir yere götürmek bir çözümdür ama kanatimce iyi bir çözüm değildir.

Sonuç olarak tüm bu bit okuma hakkındaki konuşmalar sonucu benim anladığım (yanlışsam Salih düzeltsin) ben şeridi sabit tutup kafayı bir birim hareket ettirerek okumayı düşünürken, Salih kafayı sabit tutup bit şeridini bir birim hareket ettirerek okuma yapmayı tercih ediyor.
https://github.com/zafer06 - depo
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  önceki  1  2 
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 22:31:23 (UTC -08:00)