Відмінності між версіями «Побітові оператори JavaScript»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
 
(не показані 15 проміжних версій ще одного учасника)
Рядок 1: Рядок 1:
== '''''Побітові Оператори''''' ==
+
Побітові оператори впливають на операнди як набір бітів ('''0''' і '''1''').<br>
Побітові оператори впливають на операнди як набір бітів (0 і 1). Наприклад, десяткове число 9 має бінарне представлення 1001. Побітові оператори виконують дії на таких двійкових представленнях, але вони повертають стандартне JavaScript чисельне значення.<br/><br/>
+
Побітові оператори виконують дії на таких двійкових представленнях, але вони повертають стандартне JavaScript чисельне значення.
 +
<TABLE border = 1 align = center>
 +
<CAPTION> '''''Таблиця побітових представлень двійкових чисел.''''' </CAPTION>
 +
<TR>
 +
  <TH align = center>Двійкове представлення</TH>
 +
  <TH align = center>Десяткове представлення</TH>
 +
  <TH align = center>Шісняцяткове представлення</TH>
 +
  <TD> </TD>
 +
  <TH align = center>Двійкове представлення</TH>
 +
  <TH align = center>Десяткове представлення</TH>
 +
  <TH align = center>Шісняцяткове представлення</TH>
 +
</TR>
 +
<TR>
 +
  <TD align = center>0000</TD>
 +
  <TD align = center>0</TD>
 +
  <TD align = center>0</TD>
 +
  <TD> </TD>
 +
  <TD align = center>1000</TD>
 +
  <TD align = center>8</TD>
 +
  <TD align = center>8</TD>
 +
</TR>
 +
<TR>
 +
  <TD align = center>0001</TD>
 +
  <TD align = center>1</TD>
 +
  <TD align = center>1</TD>
 +
  <TD> </TD>
 +
  <TD align = center>1009</TD>
 +
  <TD align = center>9</TD>
 +
  <TD align = center>9</TD>
 +
</TR>
 +
<TR>
 +
  <TD align = center>0010</TD>
 +
  <TD align = center>2</TD>
 +
  <TD align = center>2</TD>
 +
  <TD> </TD>
 +
  <TD align = center>1010</TD>
 +
  <TD align = center>10</TD>
 +
  <TD align = center>A</TD>
 +
</TR>
 +
<TR>
 +
  <TD align = center>0011</TD>
 +
  <TD align = center>3</TD>
 +
  <TD align = center>3</TD>
 +
  <TD> </TD>
 +
  <TD align = center>1011</TD>
 +
  <TD align = center>11</TD>
 +
  <TD align = center>B</TD>
 +
</TR>
 +
<TR>
 +
  <TD align = center>0100</TD>
 +
  <TD align = center>4</TD>
 +
  <TD align = center>4</TD>
 +
  <TD> </TD>
 +
  <TD align = center>1100</TD>
 +
  <TD align = center>12</TD>
 +
  <TD align = center>C</TD>
 +
</TR>
 +
<TR>
 +
  <TD align = center>0101</TD>
 +
  <TD align = center>5</TD>
 +
  <TD align = center>5</TD>
 +
  <TD> </TD>
 +
  <TD align = center>1101</TD>
 +
  <TD align = center>13</TD>
 +
  <TD align = center>D</TD>
 +
</TR>
 +
<TR>
 +
  <TD align = center>0110</TD>
 +
  <TD align = center>6</TD>
 +
  <TD align = center>6</TD>
 +
  <TD> </TD>
 +
  <TD align = center>1110</TD>
 +
  <TD align = center>14</TD>
 +
  <TD align = center>E</TD>
 +
</TR>
 +
<TR>
 +
  <TD align = center>0111</TD>
 +
  <TD align = center>7</TD>
 +
  <TD align = center>7</TD>
 +
  <TD> </TD>
 +
  <TD align = center>1111</TD>
 +
  <TD align = center>15</TD>
 +
  <TD align = center>F</TD>
 +
</TR>
 +
</TABLE>
 +
 
  
 
== '''''Побітові Логічні оператори''''' ==
 
== '''''Побітові Логічні оператори''''' ==
Побітові логічні оператори працюють таким чином:<br/>
+
'''Побітові логічні оператори працюють таким чином:'''<br/>
&nbsp;&nbsp;&nbsp;&nbsp;* Операнди перетворені в 32-бітові цілі числа, і вирази рядків бітів (0 і 1).
+
* Операнди перетворені в '''32-бітові''' цілі числа, і вирази рядків бітів ('''0''' і '''1''').
&nbsp;&nbsp;&nbsp;&nbsp;* Кожен біт в першому операнді з'єднаний з відповідним бітом у другому операнді: перший біт до першого біту, другий біт до другого біту, і так далі.
+
* Кожен біт в першому операнді з'єднаний з відповідним бітом у другому операнді: перший біт до першого біту, другий біт до другого біту, і так далі.
____* Оператор застосовується до кожної пари бітів, і результат створений побітовий.<br/><br/>
+
* Оператор застосовується до кожної пари бітів, і результат створений побітовий.<br/><br/>
''Побітовi оператори:''<br/>
+
'''Побітовi оператори:'''<br/>
____* Побітове І & повертає 1, якщо обидва операнди 1.<br/>
+
* Побітове AND "'''&'''" повертає 1, якщо обидва операнди 1.<br/>
____* Побітове АБО | повертає 1, якщо будь-який операнд 1.<br/>
+
* Побітове АБО "'''|'''" повертає 1, якщо будь-який операнд 1.<br/>
____* Виключне побітове АБО ^ повертає 1, якщо є 1 але не обидва операнди 1.<br/>
+
* Виключне побітове АБО "'''^'''" повертає 1, якщо є 1 але не обидва операнди 1.<br/>
Наприклад, бінарне представлення 9 - 1001, і бінарне представлення 15 - 1111. Так, коли побітові оператори застосовуються до цих значень, то результати виглядають наступним чином:<br/>
+
____* 15 & 9 повертає 9 (1111 & 1001 = 1001)<br/>
+
____* 15 | 9 повертає 15 (1111 | 1001 = 1111)<br/>
+
____* 15 ^ 9 повертає 6 (1111 ^ 1001 = 0110)<br/>
+
 
+
 
+
== '''''Оператори присвоювання''''' ==
+
Оператор присвоює значення лівому операнду, заснованому на значенні правого операнда. Основний оператор присвоювання рівність (=), який присвоює значення правого операнда лівому операнду. Тобто x = y приписує значення y до x (значення у присвоюється х).
+
 
+
Інші оператори виглядають наступним чином:
+
<ul>
+
<li>Додавання, конкатенація: '''x += y''' означає '''x = x + y''' </li>
+
<li>Віднімання: '''x -= y''' означає '''x = x - y''' </li>
+
<li>Множення: '''x *= y''' означає '''x = x * y''' </li>
+
<li>Ділення: '''x /= y''' означає '''x = x / y''' </li>
+
<li>Обчислення залишку від ділення: '''x %= y''' означає '''x = x % y''' </li>
+
</ul>
+
<br>
+
Є додаткові оператори присвоювання для побітових операторів
+
<ul>
+
<li>Побітовий зсув вліво: '''x <<= y''' означає '''x = x << y''' </li>
+
<li>Побітовий зсув праворуч: '''x >> = y''' означає '''x = x >> y''' </li>
+
<li>Побітовий зсув вправо із заповненням нулями '''x >>>= y''' означає '''x = x >>> y''' </li>
+
<li>Побітове AND '''x &= y''' означає '''x = x & y''' </li>
+
<li>Виключне побітове АБО '''x ^ = y''' означає '''x = x ^ y''' </li>
+
<li>Побітове OR '''x |= y''' означає '''x = x | y''' </li>
+
</ul>
+
 
+
  
 +
Приклад:
 +
'''15 & 9 = 9'''    (1111 & 1001 = 1001)
 +
'''15 | 9 = 15'''  (1111 | 1001 = 1111)
 +
'''15 ^ 9 = 6'''    (1111 ^ 1001 = 0110)
  
== '''Побітові оператори зсуву''' ==
+
== '''''Побітові оператори зсуву''''' ==
  
 
Побітові оператори зсуву:
 
Побітові оператори зсуву:
Рядок 60: Рядок 121:
 
Зсув вліво переміщує всі біти вліво на кількість позицій, вказаних в правій частині виразу, заповнюючи позиції, що звільнилися нулями.
 
Зсув вліво переміщує всі біти вліво на кількість позицій, вказаних в правій частині виразу, заповнюючи позиції, що звільнилися нулями.
  
Наприклад, 9 << 2 повертає 36, тому що 1001 зсувається на 2 біти вліво і стає рівним 100100, що дорівнює в дісятерічной системі 36.
+
'''9 << 2 = 36''' (1001 << 2 = 100100)
  
 
'''Зсув вправо (>>)'''
 
'''Зсув вправо (>>)'''
Рядок 66: Рядок 127:
 
Зсув вправо заповнює звільнені ліворуч позиції значенням самого лівого біта вихідного значення.
 
Зсув вправо заповнює звільнені ліворуч позиції значенням самого лівого біта вихідного значення.
  
Наприклад, 9 >> 2 повертає 2, тому що 1001 зсувається на два біти вправо і стає 10, що дорівнює в десятичній системі 2. Аналогічно, -9 >> 2 повертає -3, тому що знак зберігається.
+
'''9 >> 2 = 2''' (1001 >> 2 = 10)
  
 
'''Зсув вправо із заповненням нулями (>>>)'''
 
'''Зсув вправо із заповненням нулями (>>>)'''
Рядок 72: Рядок 133:
 
Зсув вправо із заповненням нулями працює аналогічно зсуву вліво, тільки в протилежному напрямі.
 
Зсув вправо із заповненням нулями працює аналогічно зсуву вліво, тільки в протилежному напрямі.
  
Наприклад, 19>>> 2 повертає 4, бо 10011 зсувається на два біти праворуч і стають 100, що дорівнює в десятичній системі 4. Для postive чисел, нуль - заповнює правий зсув, і що поширюється знак зміщюється вправо видає той же самий результат.
+
Наприклад, 19 >>> 2 повертає 4, бо 10011 зсувається на два біти праворуч і стають 100, що дорівнює в десятичній системі 4. Для postive чисел, нуль - заповнює правий зсув, і що поширюється знак зміщюється вправо видає той же самий результат.
  
  

Поточна версія на 08:20, 7 квітня 2012

Побітові оператори впливають на операнди як набір бітів (0 і 1).
Побітові оператори виконують дії на таких двійкових представленнях, але вони повертають стандартне JavaScript чисельне значення.

Таблиця побітових представлень двійкових чисел.
Двійкове представлення Десяткове представлення Шісняцяткове представлення Двійкове представлення Десяткове представлення Шісняцяткове представлення
0000 0 0 1000 8 8
0001 1 1 1009 9 9
0010 2 2 1010 10 A
0011 3 3 1011 11 B
0100 4 4 1100 12 C
0101 5 5 1101 13 D
0110 6 6 1110 14 E
0111 7 7 1111 15 F


Побітові Логічні оператори

Побітові логічні оператори працюють таким чином:

  • Операнди перетворені в 32-бітові цілі числа, і вирази рядків бітів (0 і 1).
  • Кожен біт в першому операнді з'єднаний з відповідним бітом у другому операнді: перший біт до першого біту, другий біт до другого біту, і так далі.
  • Оператор застосовується до кожної пари бітів, і результат створений побітовий.

Побітовi оператори:

  • Побітове AND "&" повертає 1, якщо обидва операнди 1.
  • Побітове АБО "|" повертає 1, якщо будь-який операнд 1.
  • Виключне побітове АБО "^" повертає 1, якщо є 1 але не обидва операнди 1.

Приклад:

15 & 9 = 9    (1111 & 1001 = 1001)
15 | 9 = 15   (1111 | 1001 = 1111)
15 ^ 9 = 6    (1111 ^ 1001 = 0110)

Побітові оператори зсуву

Побітові оператори зсуву:

  • Зсув вліво (<<)
  • Зсув вправо (>>)
  • Зсув вправо із заповненням нулями (>>>)


Оператор зсуву присвоює два операнди: перший - кількість на яке буде зміщено, і другий визначає число бітових положень, якими перший операнд повинен бути змістити. Напрямок дії зсуву управляється керуючим оператором.

Оператори зсуву перетворять операнди до 32-бітового цілого числа, і повертають результат того ж самого типу що і лівий оператор.

Зсув вліво (<<)

Зсув вліво переміщує всі біти вліво на кількість позицій, вказаних в правій частині виразу, заповнюючи позиції, що звільнилися нулями.

9 << 2 = 36 (1001 << 2 = 100100)

Зсув вправо (>>)

Зсув вправо заповнює звільнені ліворуч позиції значенням самого лівого біта вихідного значення.

9 >> 2 = 2 (1001 >> 2 = 10)

Зсув вправо із заповненням нулями (>>>)

Зсув вправо із заповненням нулями працює аналогічно зсуву вліво, тільки в протилежному напрямі.

Наприклад, 19 >>> 2 повертає 4, бо 10011 зсувається на два біти праворуч і стають 100, що дорівнює в десятичній системі 4. Для postive чисел, нуль - заповнює правий зсув, і що поширюється знак зміщюється вправо видає той же самий результат.


Оператори мови JavaScript