Bilmece bulmaca buçuklu kaydirmaca

Başlatan z, 01 Temmuz 2014, 00:28:15

z

Digital sistemlerde  saga ve sola kaydirmayi biliyoruz.

a=n>>x; n sayisini x kez saga kaydir ve sonucu a'ya yaz demektir.

Bulmacamiz şöyle;

a=n>>x.5 ne anlama gelir?

Sorunun cevabi kaydirma sadece tam sayilarla tanimlidir degil tabiki.

Ornegin 128 sayisini 2.5 kere saga kaydirirsak sonuc kac olur?

-------------------------------------------

Bir de fikramiz var.

Temel Dursuna;

Temel: Usagum sana bir bilmecem var.
   Dursun: Sor usagum.
Temel: Kafesde yasar sari renklidir cik cik ses cikarir.
   Dursun: Kanarya
Temel: Bilemedun
   Dursun: Bulbul
Temel: Bilemedun
   Dursun: Muhabbet kusu
Temel: Bilemedun
   Dursun: Sen soyle
Temel: Hamsi usagum hamsi
   Dursun: Ula Temel hamsi kafesde ne arayi
Temel: Ben koydum
   Dursun: Ula Temel, hamsi sarumudur?
Temel Ben boyadim
   Dursun: Ula temel Hamsi cik cik oteymi?
Temel: Usagum bilmecede o kadarcik aldatmaca da olsun artik.

-------------------------------------------

Bilmecem de aldatmaca yoktur.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

apsis

Fıkra çok güzeldi hocam. 24 mü olur?
"Makineye Beyin" MEKATRONİK

z

#2
Sayisal sonucu verin ama hepimiz soruya cevap icin yuruteceginiz mantigi merak edecegiz.

Sonuc 24 değil.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Gökhan BEKEN

#3
Hocam kaydırma işlemi aslında çarpma ve bölme olduğuna göre;
a=144>>3 işlemini adım adım ele alalım o halde
144 sayısını 3 kere sağa kaydır(3 defa, 2'ye böl)
144=0b10010000
144/2=72
72/2=36
36/2=18
0b10010000 sayını direkt sağa kaydırsak: 0b00010010 yani 18 yapar yani sonuç değişmez.

demekki 2.5 kere sola sağa kaydırsaydık 36 dan küçük 18 den büyük bir sayı çıkması gerekirdi.

n sayısını 2.5  kere sağa kaydırmayı şöyle mi anlamalıyız: "2 defa, yarıla(2 ye böl), 1 kere çeyrekle"

Gel gelelim, c++ ile float kaydırma yaptığımda.
1<<2.5 işleminin sonucu: -2147483648 yani ob10000000000000000000000000000000 alıyorum.

Özel mesaj okumuyorum, lütfen göndermeyin.

z

Evet dogru yoldasin ama sonuclandirmak lazim.

Bir sayiyi 2.5 kere saga kaydirmak

2 kere kaydirma ile 3 kere kaydirma arasinda bir sonuc uretmelidir. Tamam da hangi sonucu?

C++ da 128>>2.5 icin ne diyor?  (Derleyicinin bu satira kizmasini beklerdim.)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

#5
25 kere sağa , 10 kere sola  kaydırsak. al sana 2.5 kere kaydırma (!)

hadi başlayalım. 25 kere sağa kaydırdık. sayı bittii. yok oldu.. nereye kaydırırssan kaydır, 0.

not: eğleniyoruz

muhittin_kaplan


Gökhan BEKEN

#7
kızıyor tabiki ama şu şekilde yazdım:
float virgullu=2.5;
cout << (1<<virgullu) << endl;


Kendi örneğimden sonuç çıkarak olursam: 144 sayısının 2.5 kere sağa kaydırılmasından 14,4 sonucunu çıkarttım.
Neden?
Sağa kaydırmak sayıyı 2 bölmek dedik ama, aslında 1/2 ile çarpmak olduğuna göre. Yarım kaydırmak da 1/2.5 demektir.

144*(1/2)=72
72*(1/2)=36
36*(1/2.5)=14,4



Sizin sorunuz: Ornegin 128 sayisini 2.5 kere saga kaydirirsak sonuc kac olur?
adımlar:
128>>1
128>>1
128>>1,25 değil midir?
Yani
128*(1/2)=64
64*(1/2)=32
32*(1/2.5)=12,8 yapar


mesaj birleştirme:: 01 Temmuz 2014, 01:40:54

Aslında yine hatalı sonuç
3 kere kaydırdığımızda sonuç 16 olurdu, 2.5 kere kaydırınca daha büyük bir sonuç çıkması lazımdı.
Şimdi bunu düşünüp uyuyamayacağım :D
1/2.5 ile değil de 0.75 ile çarparsak ancak doğru sonucu alırız.
yani 32*0.75=24 eder.
Ama siz doğru sonuç 24 değil demişsiniz.

Not: yanlış yazdığım sayılar vardı, düzelttim.
Özel mesaj okumuyorum, lütfen göndermeyin.

hasankara

128/(2^(2.5))= 22,627417 sanırım soru bu sonucu bulmak değildi ben amacı tam anlayamadım yada. yinede şansımı deneyeyim dedim ;D

RaMu

Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

@Hasankara

Evet aynen bu sekilde dusunup sormustum.

X sayisini n kez saga kaydirmak  X/2^n demektir.

Eger X=128 n=2.5 ise   

128/2^2.5=22.627 olur.



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan


z

#12
Peki 8 bitlik sayilar icin boyle bir lojik devre tasarlayabilirmisiniz?

8 bitlik girisdeki veri 2.5 kez saga kaydirilsin ve cikistan tam sayi olarak ciksin.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

hasankara

2^-2.5 = 2^-2 * 2^(-1/2) = 1/(2^2 * karekok(2)) iki üzeri iki kısmını sağa iki kez kaydırma şeklinde halledebiliyoruz.   köklü ifadeler için sayısal analiz yöntemlerinden newton raptson kullanılabilinir. sağa kaydırılan sayı, kullanılan yöntem sonucundaki köklü ifadenin sayısal değerine bölünür ise sonuç bulunmuş olunur. float kullanılmak istenmiyorsa köklü ifade bulunurken kesirli sayılarla işlem yapıyormuş gibi yaklaşılabilinir. yani (sayı*16)/16) şeklinde düşünebilirsiniz. 4 kez sola kaydırılmış sayı üzerinden işlem yapılır en son küsürat atılacağı zaman tekrar sağa 4 kez kaydırabilirsiniz.

engerex

2.5 değilde 3.9713 olursa ne olur?