значение << число_битов
значение >> число_битов
// Продемонстрировать применение операторов сдвига.
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);
}
}