Ne işe yarar ve nerelerde kullanılıyor?

soruldu: 23 Nis '15, 05:41

Orhun's gravatar image

Orhun
30191323
cevap kabul oranı: 50%


Genelde assembly yada C programcıları tarafından çoğu yerde kullanılır. Üst düzey dillerde ise yazılımcının bitlerle işi olmaz. Esasında tüm veri tipleri zaten bitlerden oluşur ama donanım seviyesinde çalışmadığımız için standart işlemler (toplama çıkarma çarpma bölme mod alma falan filan) bize yeterli olur.

Donanım seviyesine inersek bu işlemlerin kullanım sınırı yok. Hatta bazı çarpma bölme işlemlerini bit operatörleri karşılıklarında yaparsan daha hızlı olur (Writing Solid Code isimli kitapta böyle yazıyordu). Daha detaylı bilgiyi BU, BU, BU, BU ve son olarak BU adreste bulabilirsin (konu güzel olduğu için sadece başlangıç yaptım, eve gidince araştırıp sonuçları derleyerek yazacağım).

permanent link

cevaplandı: 24 Nis '15, 03:08

kodmanyagha's gravatar image

kodmanyagha
3.1k132852
cevap kabul oranı: 15%

Donanım seviyesindeki toplama ile üst seviye yazılım dillerindeki toplama işlemi bazı sınırlar içerisinde kalındığında aynı sonucu verir. Sonuç aynı ama izlenen yol farklıdır. Örneğin bir sayıyı 2 ile çarpmak yerine bir bit sola kaydırmak ikili sistemde taşma yapılmadığı sürece aynı sonucu verir. Örneğin 8 bitlik bir işlemci üzerinde bir sayıyı 2 ile çarpmak istiyorsunuz. Bunu iki defa aynı sayıyı toplamak olarak yapabilirsiniz. Bunu bir döngü içerisinde yaparsınız ve işlemciye iki defa toplama işlemi yaptırmanız gerekir. Yani yapmanız gereken birkaç şey var. Birisi döngüyü kontrol etmek, diğeri döngü süresince toplama işlemi yaptırmak. Bu kadar şeyi yapmak yerine sayıyı bir bit sola kaydırırsanız aynı sonuca ulaşırsınız. Örneğin sayımız onluk sistemde 5, ikilik sistemde 00000101 (8 bitlik işlemci için düşünüyoruz). Bu sayıyı 2 ile çarparsak sonuç 10 yapar yani ikilik sistemde 00001010. Gördüğün gibi 8 bitlik kombinasyonda sayılar bir basamak sola kaymış. Bu mantık 2'nin katlarıyla çarpıldığında değişmez. Örneğin 5'i 4 ile çarparsak 20'ye ulaşmak için bu 00000101 sayısını 2 defa sola kaydırmamız gerekir. Yani 00010100. Tabiki bu yöntemin 8 bitlik sistem dahilinde kalması gerekiyor. Zaten seninde anladığın üzere birkaç kez sola kaydırırsan lazım olan veriler kaybolur. Aynı şekilde üst düzey dillerde çok büyük sayılar üzerinde işlem yapmaya çalıştığınız zaman dil saçmalamaya başlar. Örneğin Java dilinde iki tane byte tipli veriyi çarptığınızda sonuç bir byte değerini aşarsa (255) hata alırsınız. Bilmem anlatabildim mi?

Bu örneği ve daha farklı örnekleri makalemde yazıyorum. Ayrıca bil müh bölümlerinde Mikroişlemciler dersi kitaplarında çok daha detaylı bilgi bulunabilir. Dediğim gibi bu işin kullanım alanı sınırsız. Bit operatörleriyle donanım seviyesinde birçok problemi hızlıca ve (assembly ve C'de mantığı ve kodlaması pek kolay olmamakla beraber) iyi bir şekilde çözebilirsiniz.

permanent link

cevaplandı: 26 Nis '15, 11:47

kodmanyagha's gravatar image

kodmanyagha
3.1k132852
cevap kabul oranı: 15%

değiştirildi: 26 Nis '15, 11:52

Teşekkürler Emir. Donanım seviyesindeki işlem sonucu ile bizim üst seviye dillerdeki yaptığımız işlem sonucu farklı değil ama sanırım. Sadece işlem süreci farklı yollardan geçiyor. Doğru muyum?

permanent link

cevaplandı: 25 Nis '15, 05:59

Orhun's gravatar image

Orhun
30191323
cevap kabul oranı: 50%

Teşekkür ederim, gayet faydalı oldu anlattıklarınız.

permanent link

cevaplandı: 27 Nis '15, 04:40

Orhun's gravatar image

Orhun
30191323
cevap kabul oranı: 50%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1
×1

Soruldu: 23 Nis '15, 05:41

Görüntüleme: 507 kez

Son güncelleme: 27 Nis '15, 04:40

Benzer sorular

powered by BitNami OSQA