July 27, 2012

Şurada (http://ddili.org/forum/thread/899) tartışmaya başlamıştık...
Alıntı (Salih Dinçer):

>

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:

> 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);
> }
> ```

>
Bir şey daha unutmuşum: İşaretli sayılarda türün iki sıfırı mı var!
:)

Ben öyle zannediyordum ki bunu yukarıda ifade ettim (binary 128). Oysa teoride böyle olsa da sanırım pratikte bu kullanılmıyor. Bunu şu kodu deneyerek anlayabilirsiniz:

foreach(byte i; -128..0) {
writefln("%d: %b", i, i);
}


Oysa bütün türlerde olduğu gibi .max ile .min'nin işaretsiz değeri birbirine eşit değil. Bunu da şu assert(iddia ediyorum) ile anlıyoruz:

assert(long.max != std.math.abs(long.min));


Aslında bu bilgiler kanıksadığım şeyler. Yani her zaman gördüğümüz, gözümüzün altında olan ülfet ile baktığımız şeyler. Arada böyle hatırlatmalar iyi olur bea...:)

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