Merhabalar. Şimdi hiç yazıya başmaladan bir soru soracağım. Eğer cevap şak diye kafanızda parlıyorsa yazıyı okumanıza gerek yok. Zaman israfı.
Soru : Sadece bir sayı ile 32 tane farklı ampülün istediğimiz herhangi biri veya birilerini nasıl yakıp söndürebiliriz?
Eğer 120 saniye geçti ve hala bir takım senaryolar üretmeye çalışıyorsanız yazıyı okumaya devam edin.
Bu yazıda ilk duyduğumda çok hoşuma giden, sonrasında bir projede aslında kullanıyor olup kullandığımı sonradan fark ettiğim bir yöntemden bahsedeceğim. Belki teknik açıdan bu tekniğin bir ismi vardır bilemiyorum. Yazımızın içeriği 1 büyüktür 31. Evet farkındayım bu matematiğe ters. Ama konumuz matematik değil; development trick. Mevzubahis development ise matematik teferruattır.
Şimdi öncelikle “bit nedir?”, “byte nedir?”, “1 byte kaç bittir?”, “4 bayt 32 bit ise elmanın kilosu kaç tldir?” gibi soruların cevabını bilmeyen arkadaşların bu terimleri biraz araştırması gerekiyor. Bilenlerin birşey yapmasına gerek yok ancak ben yinede yukarıdaki sorulara cevap niteliğinde ufaktan değineğim.
Bit Nedir?
Bit yani “Phthiraptera”, Eklembacaklılar şubesinin Böcekler sınıfının bir takımıdır (Kabul ediyorum kötü espriydi). Bilişim alanındaki bit; bilgisayarın en küçük birmidir. Hani hekır filmlerinde siyah background üzerinde yeşil olarak 1ler 0lar akar ya, heh işte onlar bit. Bitler sadece 1 ve 0 değerini alabilen yani ikilik tabanda (binary) çalışan birimdir.
Byte Nedir?
8 tane bit’in yanyana gelerek oluşturduğu birime ise byte diyoruz.
1 byte kaç bittir?
Yukarıdaki ilk 2 sorunun cevabından yola çıkarak bir byte’ın 8 bit olduğunu söyleyebiliriz.
4 bayt 32 bit ise elmanın kilosu kaç tldir?
Valla elmanın kilosu nekadardır bilemeyecem. Malum dölar fırladı. Allahtan doların fırlaması PHP’yi vurmadı 😛 (dipnot : Php’de değişkenler dolar ($) ile tanımlanır)
Aklımızdaki soruların cevaplarını bulduğumuza göre gelelim asıl meselemize. Bu sorun ilk olarak şöyle bir senaryo ile karşıma çıkmıştı.
Sadece bir sayı ile 32 tane farklı ampülün istediğimiz herhangi biri veya birilerini nasıl yakıp söndürebiliriz?
Bit byte işlemlerini gördüğümüz yerlerden hatırlarsak 1byte 8bitti. Bir sayı değeri yani yazılımcada bir “integer” 4 bayt değerindedir. 4 byte kaç bitti? 32. Buda demek oluyorki bir “integer” 2 üssü 32 tane değer alabiliyor. Yani 4.294.967.296 adet değer alabiliyor. Tabi bu “unsigned integer” olduğu durumlarda bu şekil. Eğer integer’ınız unsigned ise 0 ile 4.294.967.296 arasında değer alabiliyor. Unsigned değil ise -2.147.483.648 ile +2.147.483.647 arasında değerler alabiliyor.
Örneğin 4.294.967.296 sayısının hexadecimal yani 16lık sayı tabanındaki karşılığı 0xffffff, binary yani ikilik sayı sistemindeki karşılığı “11111111 11111111 11111111 11111111” dir. 32 bit, her bit 1 değerini almaktadır. Neden karşılığının bu olduğunu soracak olanlar matematik 1 konusu olan “taban aritmetiği” ne derinlemesine göz atabilirler. 10’luk tabandaki bir sayıyı 2’lik tabana çevirdik.
2. bir örnek verecek olursak 10’luk tabancaki 21 sayısının 2’lik tabandaki karşılığı “00000000 00000000 00000000 00010101” dir.
Şimdi gel gelelim ilk sorumuzun cevabına. Gerçi yazının bu kısmına kadar olayı çözmüşsünüzdür ama adettendir ben yinede anlatayım. Ne demiştik 32 tane ampülümüz var. Ampülün tek olayı mantıksal değer almasıdır. Mantıksal değerden kastımız true ve false. Yani 1 ve 0. Eğer değer 1 ise açık 0 ise kapalıdır. Zaten tüm bilgisayarın temelinde işlemcimizdeki kapıların açık veya kapalı olması yatıyor. 32 tane ampülü yan yana diziyoruz. Hangisi veya hangilerinin yanmasını istiyor isek 32 bitlik dizimizde yanmasını istediğimiz ampüllerin indexindeki değer 1 yapıp elimizdeki binary yani 2’lik sistemideki sayıyı 10’luk tabana çeviriyor. Bu sayıyı ampüllerin yanıp sönmesinden sorumlu olan cihazımıza gönderiyoruz. Cihazımız da bizim yaptığımız işlemin tam tersini yapıp yani 10’luk tabanda eline ulaşan sayıyı 2’lik sisteme çeviriyor ve 1 olan bitlerin karşılık geldiği ampülleri yakıyor.
Örneğin 32 ampülümüz içerisinden sadece baştaki ve sonraki ampüllerin yanmasını istiyor isek 2147483649 sayısını göndermeliyiz. Sebebi ise aşağıdaki resimdedir.
Sonuç olarak 1 büyüktür 31’den 🙂 Bir yazıda bukadar çok ampülden bahsetmişken Barış Manço’yu da anmadan geçmeyelim 🙂
Kanka integer’ın maksimum değeri +2.147.483.647 0 olduğundan pozitif taraftan gidiyor 😀
Evet doğru diyorsun yazıyı gece 4 te yazınca 0 ı hesap etmeyi unutmuşum 😀 teşekkürler düzelttim
Yandı, teşekkürler
Hocam orda yukarda biyerde 10 luk sistemden değil 16 lık sistemden çevirmişsiniz sayıyı yazım hatası oldu herhalde veya ben mi yanlış anladım ?
Yukarıda ki soruyu okuduğum andan itibaren binary dedim ama merağıma yenik düşüp bloğu okudum. Teşekkürler