Операторы сдвига

значение << число_битов

значение >> число_битов

// Продемонстрировать применение операторов сдвига.

using System;

class ShiftDemo

{

static void Main()

{

int val = 1;

for (int i = 0; i < 8; i++)

{

for (int t = 128; t > 0; t = t / 2)

{

if ((val & t)!= 0) Console.Write("1 ");

if ((val & t) == 0) Console.Write("0 ");

}

Console.WriteLine();

val = val << 1; // сдвиг влево

}

Console.WriteLine();

val = 128;

for (int i = 0; i < 8; i++)

{

for (int t = 128; t > 0; t = t / 2)

{

if ((val & t)!= 0) Console.Write("1 ");

if ((val & t) == 0) Console.Write("0 ");

}

Console.WriteLine();

val = val >> 1; // сдвиг вправо

}

}

}

Результат выполнения этой программы выглядит следующим образом.

0 0 0 0 0 0 0 1

0 0 0 0 0 0 1 0

0 0 0 0 0 1 0 0

0 0 0 0 1 0 0 0

0 0 0 1 0 0 0 0

0 0 1 0 0 0 0 0

0 1 0 0 0 0 0 0

1 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0

0 1 0 0 0 0 0 0

0 0 1 0 0 0 0 0

0 0 0 1 0 0 0 0

0 0 0 0 1 0 0 0

0 0 0 0 0 1 0 0

0 0 0 0 0 0 1 0

0 0 0 0 0 0 0 1

Двоичные разряды соответствуют форме представления чисел в степени 2, и поэтому операторы сдвига могут быть использованы для умножения или деления целых значений на 2. Так, при сдвиге вправо целое значение удваивается, а при сдвиге влево — уменьшается наполовину. Разумеется, все это справедливо лишь в том случае, если крайние разряды не теряются при сдвиге в ту или иную сторону.

// Применить операторы сдвига для умножения и деления на 2.

using System;

class MultDiv

{

static void Main()

{

int n=10;

Console.WriteLine("Значение переменной n: " + n);

// Умножить на 2.

n = n << 1;

Console.WriteLine("Значение переменной n после " +

"операции n = n * 2: " + n);

// Умножить на 4.

n = n << 2;

Console.WriteLine("Значение переменной n после " +

"операции n = n * 4: " + n);

// Разделить на 2.

n = n >> 1;

Console.WriteLine("Значение переменной n после " +

"операции n = n / 2: " + n);

// Разделить на 4.

n = n >> 2;

Console.WriteLine("Значение переменной n после " +

"операции n = n / 4: " + n);

Console.WriteLine();

// Установить переменную n в исходное состояние.

n = 10;

Console.WriteLine("Значение переменной n: " + n);

// Умножить на 2 тридцать раз.

n = n << 30; // данные теряются

Console.WriteLine("Значение переменной п после " +

"сдвига на 30 позиций влево: " + n);

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: