Merhaba,
Bugün ilk defa size_t'yi denedim ve 64 bit sistemde bir fark meydana gelir mi diye merak ettim. Bir sorunla karşılaştım ama bunun size_t ile de alakası olmayabilir. Hala öğrenecek ve deneyecek çok şey var...:)
Denediğim ise aşağıdaki kodu 64 bit sistemde derlediğimde 15 değerini almam gerekirken kuramsal açıdan iki katı olan 31 değerini alıyorum. Sonra -m32 ile derlediğimde bu sorun kalmıyor. Demek ki işin sırrı olinde, iki kere rafine... :nuts:
Özele; şaka bir yana bunun anlamı ne?
Alıntı (Salih Dinçer):
> import core.stdc.stdio: printf;
>
> int bitBul(size_t arananBitler, ref ubyte[] veri) {
> int uzunluk = cast(int)arananBitler;
> size_t kafa, maske = 1;
>
> for(int i = 1; i <= 64; i++) {
> maske |= maske << 1;
> uzunluk >>= 1;
> if(uzunluk == 0) {
> maske >>= 1;
> uzunluk = i;
> break;
> } // MSB bitleri 0 olana kadar devam et, önceki duruma dön ve çık
> } // maske'yi doldur ve uzunluk'tan bir bit çıkar
>
> for(ubyte b = 0; b < (veri.length * veri.sizeof); b++) {
> kafa <<= 1;
> if((veri[b / veri.sizeof] & (128 >> b % veri.sizeof))!=0) kafa |= 1;
> kafa &= maske;
> if (kafa == arananBitler) return b - uzunluk;
> }
> return -1;
> }
>
> int main() {
> // bit >> 8 16 24 32 40 48 56 64 <--ulong
> ubyte[] veriler = [ 1, 1, 137, 137, 137, 137, 137, 137, 9, 1 ];
> size_t xKelime = 0b1000_1001; // decimal 137
> int xKonum = bitBul(xKelime, veriler);
>
> printf("%lu verisi arandı ", xKelime);
>
> if(xKonum == -1) {
> printf("ama bulunamadı!");
> } else {
> printf("ve %d numaralı bitden sonra başladığı tespit edildi...:)", xKonum);
> }
> printf("\n\nHoşça kalın...\n");
>
> return 1;
> }
> ```
Teşekkürler...
--
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]