Giriş
Bit shift işlemlerinde sayılar Integer Promotion işlemine uğrayabilir.
Negatif Sayılar
Açıklaması şöyle
Sign Bitinin Kaydırılması
Bazı C gerçekleştirimleri sign bitini sabit tutar ve kaydırmaz. Elimizde şöyle bir kod olsun
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ı.
Ş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ızprintf ("%d %d", nPosVal >> 1, nNegVal >> 1);
Çıktı olarak şunu alırız32767 -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