March 20, 2012

Öncelikle sorularımı sabırla cevapladığın için teşekkür ederim Salih, umarım seni sıkmıyorumdur.

Alıntı (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?

Alıntı:

>

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.

Alıntı:

>

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.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 20, 2012

Alıntı (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...:)

Alıntı (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.

Alıntı (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

Alıntı (zafer):

>

Alıntı (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...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 20, 2012

Alıntı (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;
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 20, 2012

Kusura bakmayın, sadeleştireyim derken zorlaştırmış olabilirim...:)

Standart hale sokarsak:
Alıntı (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;
> }
> ```

>

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
March 20, 2012

Alıntı (Salih Dinçer):

>

Alıntı (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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 21, 2012

Alıntı (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 :)

Alıntı:

>

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.

Alıntı:

>

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.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2 3
Next ›   Last »