7 Kasım 2017 Salı

Bit İşlemleri

Giriş
Bit shift işlemlerinde sayılar Integer Promotion işlemine uğrayabilir.

Negatif Sayılar
Açıklaması şöyle
The result of E1 >> E2 is E1 right-shifted E2 bit positions. If  E1 has an unsigned type or if E1 has a signed type and a nonnegative value, the value of the result is the integral part of the quotient of E1 / 2*^E2. If E1 has a signed type and a negative value, the resulting value is implementation-defined.
Örnek
Şu kod tamamen C gerçekleştirimine bağlı.
int B;
B = -1 >> 5; // implementation defined behavior

Sign Bitinin Kaydırılması
Bazı C gerçekleştirimleri sign bitini sabit tutar ve kaydırmaz. Elimizde şöyle bir kod olsun
int nPosVal = +0xFFFF;   // + 65535
int nNegVal = -0xFFFF;   // - 65535
Şöyle yaparız
printf ("%d %d", nPosVal >> 1, nNegVal >> 1);
Çıktı olarak şunu alırız
32767 -32768
İlk değerler şöyledir.
nPosVal = 00000000000000001111111111111111
nNegVal = 11111111111111110000000000000001
Kaydırmadan sonra şöyle olur. Eksi sayının sign biti muhafaza edilir.
nPosVal = 00000000000000000111111111111111
nNegVal = 11111111111111111000000000000000

Hiç yorum yok:

Yorum Gönder