<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://support.qbpro.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D0%BE%D0%B1%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8</id>
	<title>Побитовые операции - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://support.qbpro.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D0%BE%D0%B1%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8"/>
	<link rel="alternate" type="text/html" href="https://support.qbpro.ru/index.php?title=%D0%9F%D0%BE%D0%B1%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;action=history"/>
	<updated>2026-04-03T21:49:04Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.1</generator>
	<entry>
		<id>https://support.qbpro.ru/index.php?title=%D0%9F%D0%BE%D0%B1%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=312&amp;oldid=prev</id>
		<title>imported&gt;Supportadmin в 15:32, 5 августа 2013</title>
		<link rel="alternate" type="text/html" href="https://support.qbpro.ru/index.php?title=%D0%9F%D0%BE%D0%B1%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=312&amp;oldid=prev"/>
		<updated>2013-08-05T15:32:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 18:32, 5 августа 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*[http://learn.javascript.ru/bitwise-operators Примеры. Побитовые операторы js]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[http://habrahabr.ru/post/134557/ Битовые операции в PHP на примерах] - пример на правах пользователей&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[http://habrahabr.ru/post/134557/ Битовые операции в PHP на примерах] - пример на правах пользователей&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key pgdb4support-mediawiki-:diff::1.12:old-311:rev-312 --&gt;
&lt;/table&gt;</summary>
		<author><name>imported&gt;Supportadmin</name></author>
	</entry>
	<entry>
		<id>https://support.qbpro.ru/index.php?title=%D0%9F%D0%BE%D0%B1%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=311&amp;oldid=prev</id>
		<title>imported&gt;Supportadmin: Новая страница: «*[http://habrahabr.ru/post/134557/ Битовые операции в PHP на примерах] - пример на правах пользователей *http…»</title>
		<link rel="alternate" type="text/html" href="https://support.qbpro.ru/index.php?title=%D0%9F%D0%BE%D0%B1%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=311&amp;oldid=prev"/>
		<updated>2013-08-04T11:35:02Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «*[http://habrahabr.ru/post/134557/ Битовые операции в PHP на примерах] - пример на правах пользователей *http…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*[http://habrahabr.ru/post/134557/ Битовые операции в PHP на примерах] - пример на правах пользователей&lt;br /&gt;
*http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8&lt;br /&gt;
*http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0&lt;br /&gt;
*http://ru.wikipedia.org/wiki/%D0%90%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0#.D0.97.D0.B0.D0.BA.D0.BE.D0.BD.D1.8B_.D0.B2.D0.B5.D0.BD.D1.8A.D1.8E.D0.BD.D0.BA.D1.86.D0.B8.D0.B8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Таблица==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Оператор ||Название ||Пример Бин.||Результат Бин. ||Описание&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;||Побитовая операция &amp;quot;И&amp;quot;||2&amp;amp;3 0010&amp;amp;0011||2 0010 || Возвращает 1 в позиции каждого бита, где соответствующий бит обоих операндов равен 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;||Побитовая операция &amp;quot;ИЛИ&amp;quot;||&amp;lt;nowiki&amp;gt;2|3 0010|0011&amp;lt;/nowiki&amp;gt;|| 3 0011 || Возвращает 1 в позиции каждого бита, где соответствующий бит одного или обоих операндов равен 1&lt;br /&gt;
|-&lt;br /&gt;
| ~||Побитовая операция &amp;quot;НЕ&amp;quot;||~3 ~0011|| 12 1100 || Инвертирует биты операнда.&lt;br /&gt;
|-&lt;br /&gt;
| ^||Побитовая операция &amp;quot;ИСКЛЮЧАЮЩЕЕ ИЛИ&amp;quot;||2^3 0010^0011 ||1 0001 || Возвращает 1 в позиции каждого бита, где соответствующий бит одного, но не обоих, операндов равен 1.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;&amp;lt;||Побитовая операция &amp;quot;сдвиг влево&amp;quot;||1&amp;lt;&amp;lt;3 0001&amp;lt;&amp;lt;3 ||8 1000 ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;&amp;gt;||Побитовая операция &amp;quot;сдвиг вправо&amp;quot;||8&amp;gt;&amp;gt;3 1000&amp;gt;&amp;gt;3|| 1 0001||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сдвиг вправо с сохранением знака   a &amp;gt;&amp;gt; b    Сдвигает операнд a в бинарном представлении на b битов вправо, отбрасывая смещённые биты.&lt;br /&gt;
&lt;br /&gt;
Сдвиг вправо с заполнением нулями   a &amp;gt;&amp;gt;&amp;gt; b    Сдвигает операнд a в бинарном представлении на b битов вправо, отбрасывая смещённые биты и заполняя слева нулями.&lt;br /&gt;
&lt;br /&gt;
==Пример для int x==&lt;br /&gt;
&lt;br /&gt;
if (x &amp;amp; 1) // нечетное&lt;br /&gt;
&lt;br /&gt;
if (~x &amp;amp; 1) //четное&lt;br /&gt;
&lt;br /&gt;
х = (х+7) &amp;amp; ~7; // сделаем его ближайшим большим кратным 8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. сдвиг.&lt;br /&gt;
&lt;br /&gt;
a=b&amp;lt;&amp;lt;5 //переменной а присваивается переменная б, сдвинутая влево на 5&lt;br /&gt;
&lt;br /&gt;
Все биты в переменной сдвигаются на заданое количество позиций влево или вправо, место с противоположной стороны заполняется нулями. например, сдвиг числа на 4 влево:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;было:  00101110&lt;br /&gt;
стало: 11100000&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. операция И.&lt;br /&gt;
&lt;br /&gt;
a=b&amp;amp;c;&lt;br /&gt;
&lt;br /&gt;
производится над двумя переменными, результат - переменная, в которой каждый бит установлен только если он установлен в обеих исходных переменных. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
00101110&lt;br /&gt;
11100110&lt;br /&gt;
--------&lt;br /&gt;
00100110&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Операция ИЛИ.&lt;br /&gt;
a=b|c;&lt;br /&gt;
&lt;br /&gt;
То же самое что и операция И, только в результате бит выставляется если он выставлен хотя бы в одной исходной переменной. &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
00101110&lt;br /&gt;
11100110&lt;br /&gt;
--------&lt;br /&gt;
11101110&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Операция НЕ.&lt;br /&gt;
&lt;br /&gt;
производится над одной переменной, в С так: a=~b; //АХТУНГ: не путать ~ с символом ! - ето другое НЕ (логическое, а нам надо побитовое).&lt;br /&gt;
&lt;br /&gt;
В результате биты инвертируются - где был 0 станет 1 и наоборот.&lt;br /&gt;
&lt;br /&gt;
5. Исключающее ИЛИ (XOR).&lt;br /&gt;
&lt;br /&gt;
a=b^c;&lt;br /&gt;
&lt;br /&gt;
Похоже на ИЛИ, только в результате бит выставляется, если в исходных переменных биты отличаются, т.е не равны одновременно 0 или 1. Пример:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;00101110&lt;br /&gt;
11100110&lt;br /&gt;
--------&lt;br /&gt;
11001000&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто используется в той или иной форме для шифрования, прикол в том, что поксорив одно число с другим два раза, получаем исходное число, т.е по сути сначала шифруем, а потом расшифровываем.&lt;br /&gt;
&lt;br /&gt;
6. Установка бита.&lt;br /&gt;
&lt;br /&gt;
Операция установки бита. Дано - переменная один или несколько байт длиной, цель - выставить определенный бит.&lt;br /&gt;
Это делается наложением битовой маски таким образом:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;a=142; // переменная&lt;br /&gt;
a=a|(1&amp;lt;&amp;lt;5); //выставляем пятый по счету бит.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как ето работает? просто. рассмотрим по шагам.&lt;br /&gt;
#сначала задается переменная a равная 142, в двоичном виде: 10001110.&lt;br /&gt;
#затем операцией сдвига (1&amp;lt;&amp;lt;5) мы получаем число 00010000. Вобще это число можно указать в явном виде вместо конструкции (1&amp;lt;&amp;lt;5), но так иногда понятнее.&lt;br /&gt;
#после этого производим побитовое ИЛИ над переменной и полученным числом 00010000.&lt;br /&gt;
#короче говоря, накладывая маску операцией ИЛИ мы устанавливаем в переменной те биты, которые выставлены в самой маске, а остальные не трогаем.&lt;br /&gt;
#соответственно, если нам надо установить несколько бит, то надо накладывать маску с несколькими выставлеными битами, например:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
10001110&lt;br /&gt;
01011000&lt;br /&gt;
--------&lt;br /&gt;
11011110&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
такую маску можно либо указать в явном виде (как уже говорилось) так и получить объединением все той же операцией ИЛИ:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;a=142; // переменная&lt;br /&gt;
a=a|((1&amp;lt;&amp;lt;5)|(1&amp;lt;&amp;lt;3)|(1&amp;lt;&amp;lt;1)); //выставляем 5, 3 и 1 бит.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Очистка бита.&lt;br /&gt;
&lt;br /&gt;
Делается аналогично установке бита, только с операцией И и инвертированной маской. т.е:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;a=142; // переменная&lt;br /&gt;
a=a&amp;amp;(~(1&amp;lt;&amp;lt;2)); //очищаем второй бит.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
по сути получается:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;10001110&lt;br /&gt;
11111101&lt;br /&gt;
--------(операция И)&lt;br /&gt;
10001100&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате очищаются те биты, которые равны 0 в маске, а остальные не изменяются.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. Установка бита dat в массиве байт data &lt;br /&gt;
&lt;br /&gt;
(прием используется в исходнике анализаторе посылок из эфира и пр):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;data[10], dat_bit;&lt;br /&gt;
data[dat_bit/8]|=(1&amp;lt;&amp;lt;(dat_bit%8));&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
т.е если например надо установить бит 17 - то он установится в третьем байте массива, вторым битом.&lt;br /&gt;
&lt;br /&gt;
9. Перевод числа битов в байты (ну ето просто).&lt;br /&gt;
&lt;br /&gt;
Например, есть у нас переменная bits с числом бит, и надо выяснить сколько ето байт, т.е поделить на 8 с округлением в большую сторону. В результате, например для 17 бит получаем число 3 (три байта т.е).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;a=bits/8+((bits%8)?1:0)&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;Supportadmin</name></author>
	</entry>
</feed>