Thread overview
D Bug
Jul 26, 2012
Salih Dinçer
Jul 26, 2012
Salih Dinçer
Jul 26, 2012
Salih Dinçer
Jul 26, 2012
Salih Dinçer
July 26, 2012

Bir başlangıç olsun ama önemsiz gördüğüm ve belki günlük hayatta kullandığımız matematiksel ifadenin yansıması diyebileceğimiz bir özelliği hemen paylaşmalıyım:

int[3] one = -1;
int[3] ONE = ~0;
assert(one == ONE);

int[3] two = -2;
int[3] TWO = ~1;
assert(two == TWO);

double[3] flo = -3.0;
double[3] FLO = ~2;
assert(flo == FLO);

Burada zannedersem yaklaşıktır ifadesinin değişken kurulurken dizi elemanlarına uygulanmasını görmekteyiz. Dikkat ederseniz yaklaşık işaretinden sonraki sayı kaç ise bir büyüğüne eşitleniyor. Yani bunun (örn. ikinci örneğin) -1,5 değerinde olduğunu farz edersek değeri yukarıya (-2'ye yuvarlanıyor.

Ama belki de bu bir BUG'dır. Öyle ya neden sayı eksiye (-) yuvarlanmakta...:)

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

July 26, 2012

Yoksa dur dur...:)

Bu bir matematiksel işlem değil de yoksa XOR mu...haha

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

July 26, 2012

Haklısın hocam, ikinin tümleyenini (http://tr.wikipedia.org/wiki/%C4%B0kinin_t%C3%BCmleyeni) unutmuşum! Yani byte için 127'den sonra 0 (binary 128) gelirken hemen -127'den devam ederek matematiksel olarak yine 0'a yaklaşıyor. Bunu aşağıdaki örnekte göstermeye çalıştım:

import std.stdio, std.string;

void main() {
   string delegate (byte) noluyor = b => format("%d\t%d\n", b, ~b) ~
                                         format("%b\t~%.8b", b, ~b);
   noluyor(15).writeln;
   foreach(byte xSay; -16..0) writefln("%d: %b", xSay, xSay);
}

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

July 27, 2012

Bir küçük bug daha ama bu benim böcüğüm...:)

Yukarıdaki kodu daha önce şöyle yapmıştım ama www.dlang.org sitesinde bu şekilde çalışmadığını gördüm:
Alıntı (Salih Dinçer):

>
> void main() {
>     string delegate (byte) noluyor = b => std.string.format("%d\t%d\n", b, ~b) ~
>                                           std.string.format("%b\t~%.8b", b, ~b);
>     std.stdio.writeln(noluyor(15));
>     foreach(byte xSay; -16..0) std.stdio.writefln("%d: %b", xSay, xSay);
> }
> ```

>
Amacım kimse import satırını eklemeden deneyebilmesini sağlamaktı. En iyisimi yol yakınken bunu alışkanlık yapmaktan vazgeçmeli. En iyisi bildiğimiz yolmuş bre...:)

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

Evet şaşırtıcı ama herşey dil kurallarına uygun olarak gelişiyor.

Senin "yaklaşıktır" dediğin işlece ben "Tersini alma işleci" demiştim:

http://ddili.org/ders/d/bit_islemleri.html

Değerin bütün bitlerini tersine çevirir: 0'lar 1'e, 1'ler 0'a... -1 ile ~0'ın eşit olmalarının nedeni de bilgisayarların kullandığı ikiye tümleyen aritmetiği nedeniyledir.

Bit olarak gösterimleri şöyle:

'
-1: 1111_1111_1111_1111
~0: 1111_1111_1111_1111

-2: 1111_1111_1111_1110
~1: 1111_1111_1111_1110

-3: 1111_1111_1111_1101
~2: 1111_1111_1111_1101
'

Ali

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