Страница 40 из 502
<b>0 1 0 0 0 0 0 0</b>
<b>1 0 0 0 0 0 0 0</b>
<b>1 0 0 0 0 0 0 0</b>
<b>0 1 0 0 0 0 0 0</b>
<b>0 0 1 0 0 0 0 0</b>
<b>0 0 0 1 0 0 0 0</b>
<b>0 0 0 0 1 0 0 0</b>
<b>0 0 0 0 0 1 0 0</b>
<b>0 0 0 0 0 0 1 0</b>
<b>0 0 0 0 0 0 0 1</b>
Двоичные разряды соответствуют форме представления чисел в степени 2, и поэтому операторы сдвига могут быть использованы для умножения или деления целых значений на 2. Так, при сдвиге вправо целое значение удваивается, а при сдвиге влево — уменьшается наполовину. Разумеется, все это справедливо лишь в том случае, если крайние разряды не теряются при сдвиге в ту или иную сторону. Ниже приведен соответствующий пример.
<b>// Применить операторы сдвига для умножения и деления на 2.</b>
<b>using System;</b>
<b>class MultDiv {</b>
<b> static void Main() { </b>
<b> int n;</b>
<b> n = 10;</b>
<b> Console.WriteLine("Значение переменной n: </b><b>" + n) ;</b>
<b> // Умножить на 2.</b>
<b> n = n << 1;</b>
<div class="fb2-code"><code><div class="fb2-code"><code>&lt;b&gt; Console.WriteLine(&amp;quot;Значение переменной n: после &amp;quot; +&lt;/b&gt;</code></div></code></div>
<div class="fb2-code"><code><div class="fb2-code"><code>&lt;b&gt; &amp;quot;операции n = n * 2: &amp;quot; + n) ;&lt;/b&gt;</code></div></code></div>
<b> // Умножить на 4.</b>
<b> n = n << 2;</b>
<div class="fb2-code"><code><div class="fb2-code"><code>&lt;b&gt; Console.WriteLine(&amp;quot;Значение переменной n: после &amp;quot; +&lt;/b&gt;</code></div></code></div>
<div class="fb2-code"><code><div class="fb2-code"><code>&lt;b&gt; &amp;quot;операции n = n * 4: &amp;quot; + n) ;&lt;/b&gt;</code></div></code></div>
<b> // Разделить на 2.</b>
<b> n = n >> 1;</b>
<div class="fb2-code"><code><div class="fb2-code"><code>&lt;b&gt; Console.WriteLine(&amp;quot;Значение переменной n: после &amp;quot; +&lt;/b&gt;</code></div></code></div>
<div class="fb2-code"><code><div class="fb2-code"><code>&lt;b&gt; &amp;quot;операции n = n / 2: &amp;quot; + n) ;&lt;/b&gt;</code></div></code></div>
<div class="fb2-code"><code><b> // Разделить на 4.</b></code></div>
<div class="fb2-code"><code><b> n = n &gt;&gt; 2;</b></code></div>
<div class="fb2-code"><code><div class="fb2-code"><code>&lt;div class=&quot;fb2-code&quot;&gt;&lt;code&gt;&amp;lt;b&amp;gt; Console.WriteLine(&amp;amp;quot;Значение переменной n: после &amp;amp;quot; +&amp;lt;/b&amp;gt;&lt;/code&gt;&lt;/div&gt;</code></div></code></div>
<div class="fb2-code"><code><div class="fb2-code"><code>&lt;div class=&quot;fb2-code&quot;&gt;&lt;code&gt;&amp;lt;b&amp;gt; &amp;amp;quot;операции n = n / 4: &amp;amp;quot; + n) ;&amp;lt;/b&amp;gt;&lt;/code&gt;&lt;/div&gt;</code></div></code></div>
Console.WriteLine();
<b> // Установить переменную n в исходное состояние, </b>
<b> n = 10;</b>
<b> Console.WriteLine("Значение переменной n: " + n);</b>
<b> // Умножить на 2 тридцать раз. </b>
<b> n = n << 30; // данные теряются</b>
<b> Console.WriteLine("Значение переменной n после " +</b>
<b> "сдвига на 30 позиций влево: " + n);</b>
<b> }</b>
<b>}</b>
Ниже приведен результат выполнения этой программы.
<b>Значение переменной n: 10</b>