Добавить в цитаты Настройки чтения

Страница 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(&quot;Значение переменной n: </b><b>&quot; + n) ;</b>

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

<b>    n = n &lt;&lt; 1;</b>

<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>

<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 * 2: &amp;amp;quot; + n) ;&amp;lt;/b&amp;gt;&lt;/code&gt;&lt;/div&gt;</code></div>

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

<b>    n = n &lt;&lt; 2;</b>

<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>

<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>

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

<b>    n = n &gt;&gt; 1;</b>

<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>

<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 / 2: &amp;amp;quot; + n) ;&amp;lt;/b&amp;gt;&lt;/code&gt;&lt;/div&gt;</code></div>

<div class="fb2-code"><code>&lt;b&gt;    // Разделить на 4.&lt;/b&gt;</code></div>

<div class="fb2-code"><code>&lt;b&gt;    n = n &amp;gt;&amp;gt; 2;&lt;/b&gt;</code></div>

<div class="fb2-code"><code>&lt;div class=&quot;fb2-code&quot;&gt;&lt;code&gt;&amp;lt;div class=&amp;quot;fb2-code&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;b&amp;amp;gt;    Console.WriteLine(&amp;amp;amp;quot;Значение переменной n: после &amp;amp;amp;quot; +&amp;amp;lt;/b&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/div&gt;</code></div>

<div class="fb2-code"><code>&lt;div class=&quot;fb2-code&quot;&gt;&lt;code&gt;&amp;lt;div class=&amp;quot;fb2-code&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;b&amp;amp;gt;                &amp;amp;amp;quot;операции n = n / 4: &amp;amp;amp;quot; + n) ;&amp;amp;lt;/b&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/div&gt;</code></div>

    Console.WriteLine();

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

<b>    n = 10;</b>

<b>    Console.WriteLine(&quot;Значение переменной n: &quot; + n);</b>

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

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

<b>    Console.WriteLine(&quot;Значение переменной n после &quot; +</b>

<b>                &quot;сдвига на 30 позиций влево: &quot; + n);</b>

<b>  }</b>

<b>}</b>

Ниже приведен результат выполнения этой программы.

<b>Значение переменной n: 10</b>