Aracılığıyla paylaş


Bit Düzeyinde Kaydırma İşleçleri

Shift işleçleri, ilk işlenenlerini ikinci işlenenin belirttiği konum sayısına göre sola (<<) veya sağa (>>) kaydırıyor.

Sözdizimi

shift-expression:
additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression

her iki işlenen de tam sayı değerleri olmalıdır. Bu işleçler normal aritmetik dönüştürmeleri gerçekleştirir; sonucun türü, dönüştürmeden sonra sol işlenenin türüdür.

Sola doğru kaydırmalar için boşaltılan sağ bitler 0 olarak ayarlanır. Sağa doğru kaydırmalar için, boşaltılan sol bitler dönüştürmeden sonraki ilk işlenenin türüne göre doldurulur. Türü ise unsigned, 0 olarak ayarlanır. Aksi takdirde, bunlar işaret bitinin kopyalarıyla doldurulur. Taşması olmayan sol vardiya işleçleri için deyimi

expr1 << expr2

2 expr2 ile çarpmaya eşdeğerdir. Sağ vardiya işleçleri için,

expr1 >> expr2

, imzalanmamışsa veya gereksiz bir değere sahipse expr1 2expr2'ye bölmeye eşdeğerdir.

İkinci işlenen negatifse veya sağ işlenen yükseltilen sol işlenenin bitlerindeki genişlikten büyük veya buna eşitse shift işleminin sonucu tanımsız olur.

Vardiya işleçleri tarafından gerçekleştirilen dönüştürmeler taşma veya yetersizlik koşulları sağlamadığından, vardiya işleminin sonucu dönüştürmeden sonraki ilk işlenenin türünde gösterilemiyorsa bilgiler kaybolabilir.

unsigned int x, y, z;

x = 0x00AA;
y = 0x5500;

z = ( x << 8 ) + ( y >> 8 );

Bu örnekte, x sola sekiz konum kaydırılır ve y sekiz konum sağa kaydırılır. Kaydırılan değerler eklenir, 0xAA55 verilir ve öğesine zatanır.

Negatif değeri sağa kaydırmak özgün değerin yarısını verir ve aşağı yuvarlanır. Örneğin, -253 (ikili 11111111 00000011) sağa kaydırıldığında bir bit -127 (ikili 11111111 10000001) üretir. Pozitif bir 253, +126 üretmek için sağa doğru kayıyor.

Sağ kaydırmalar işaret bitini korur. İşaretli bir tamsayı sağa kaydığında, en önemli bit ayarlanmış olarak kalır. İşaretsiz bir tamsayı sağa kaydığında, en önemli bit temizlenir.

Ayrıca bkz.

Sol Shift ve Sağ Shift İşleçleri (>> ve <<)