Битовые операции

Поделись знанием:
(перенаправлено с «Булевы операции»)
Перейти к: навигация, поиск

Би́товая опера́ция в программировании — некоторые операции над цепочками битов. В программировании, как правило, рассматриваются лишь некоторые виды этих операций: логические побитовые операции и битовые сдвиги. Битовые операции применяются в языках программирования и цифровой технике, изучаются в дискретной математике.





Побитовые логические операции

Ряд источников по языкам низкого уровня называет побитовые логические операции просто логическими[1][2], но в терминологии программирования на языках высокого уровня в названиях битовых операций присутствуют прилагательные битовый, побитовый (например: «побитовое логическое И», оно же «побитовое умножение»), поразрядный.

В некоторых языках программирования названия операторов, соответствующих логическим и побитовым логическим операциям, похожи. Кроме того, язык программирования может допускать неявное приведение числового типа к логическому и наоборот. В таких языках программирования необходимо внимательно следить за использованием логических и побитовых операций, перемешивание которых может привести к ошибкам. Например, в C++ результатом выражения «2 && 1» (логическое И) является булево значение true, а результатом выражения «2 & 1» (побитовое И) — целое значение 0.

Побитовое отрицание (NOT)

Побитовое отрицание (или побитовое НЕ, или дополнение) — это унарная операция, действие которой эквивалентно применению логического отрицания к каждому биту двоичного представления операнда. Другими словами, на той позиции, где в двоичном представлении операнда был 0, в результате будет 1, и, наоборот, где была 1, там будет 0. Например:

НЕ 01
10

Побитовое И (AND)

Побитовое И — это бинарная операция, действие которой эквивалентно применению логического И к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов. Другими словами, если оба соответствующих бита операндов равны 1, результирующий двоичный разряд равен 1; если же хотя бы один бит из пары равен 0, результирующий двоичный разряд равен 0.

Пример:

И 0011
0101
0001

Побитовое ИЛИ (OR)

Побитовое ИЛИ — это бинарная операция, действие которой эквивалентно применению логического ИЛИ к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов. Другими словами, если оба соответствующих бита операндов равны 0, двоичный разряд результата равен 0; если же хотя бы один бит из пары равен 1, двоичный разряд результата равен 1.

Пример:

ИЛИ 0011
0101
0111

Исключающее ИЛИ (XOR)

Исключающее ИЛИ (или сложение по модулю 2) — это бинарная операция, результат действия которой равен 1, если число складываемых единичных битов нечётно и равен 0, если чётно. Другими словами, если оба соответствующих бита операндов равны между собой, двоичный разряд результата равен 0; в противном случае, двоичный разряд результата равен 1.

Пример:

Искл. ИЛИ 0011
0101
0110

Первое русское название операции обусловлено тем, что результат данной операции отличается от результата «ИЛИ» только в одном случае из 4 случаев входа — обоих 1 (случай одновременной истинности аргументов «исключается»). Ещё в русской грамматике значение данной логической связки передаётся союзом «либо».

Второе название — тем, что действительно является сложением в кольце вычетов по модулю два, из чего следуют некоторые интересные свойства. Например, в отличие от вышеописанных «И» и «ИЛИ», данная операция является обратимой, или инволютивной: <math>(x \oplus y) \oplus y = x</math>.

В компьютерной графике «сложение по модулю два» применяется при выводе спрайтов на картинку — повторное её применение убирает спрайт с картинки. Благодаря инволютивности эта же операция нашла применение в криптографии как простейшая реализация абсолютно стойкого шифра (шифра Вернама). «Сложение по модулю два» также может использоваться для обмена двух переменных, используя алгоритм обмена при помощи исключающего ИЛИ.

Также данная операция может называться «инверсией по маске», то есть у исходного двоичного числа инвертируются биты, которые совпадают с 1 в маске.

Другие побитовые логические операции

В распространённых языках программирования встроенными средствами реализуются только четыре побитовые логические операции: И, ИЛИ, НЕ и исключающее ИЛИ. Для задания произвольной побитовой логической операции вполне достаточно перечисленных, и, более того, как следует из теории булевых функций, можно ограничиться ещё меньшим набором базовых операций. Есть также языки программирования, где существует встроенная возможность выполнить любую бинарную логическую операцию побитово. Например, в PL/I есть встроенная функция BOOL, третий аргумент которой предназначен для указания произвольной логической операции, которую необходимо побитово применить к первым двум аргументам[3].

Битовые сдвиги

К битовым операциям также относят битовые сдвиги. При сдвиге значения битов копируются в соседние по направлению сдвига. Различают несколько видов сдвигов — логический, арифметический и циклический, в зависимости от обработки крайних битов.

Также различают сдвиг влево (в направлении от младшего бита к старшему) и вправо (в направлении от старшего бита к младшему).

Логический сдвиг

При логическом сдвиге значение последнего бита по направлению сдвига теряется (копируясь в бит переноса), а первый приобретает нулевое значение.

Арифметический сдвиг

Арифметический сдвиг аналогичен логическому, но число считается знаковым, представленным в дополнительном коде. Так, при правом сдвиге старший бит сохраняет своё значение. Левый арифметический сдвиг идентичен логическому.

Арифметические сдвиги влево и вправо используются для быстрого умножения и деления на 2.

Циклический сдвиг

При циклическом сдвиге, значение последнего бита по направлению сдвига копируется в первый бит (и копируется в бит переноса).

Также различают циклический сдвиг через бит переноса — при нём первый бит по направлению сдвига получает значение из бита переноса, а значение последнего бита сдвигается в бит переноса.

В языках программирования

В следующей таблице для некоторых языков программирования приведены встроенные операторы и функции, реализующие побитовые логические операции.

Язык НЕ И ИЛИ Искл. ИЛИ Сдвиг влево Сдвиг вправо Другие
C/С++, Java[4], C#, Ruby ~ & | ^ << >>
Pascal[5] not and or xor shl shr
PL/I[6] INOT IAND IOR IEOR BOOL
¬ & | ¬
Prolog[7] \ /\ \/

В теории сложности алгоритмов

Термин битовая операция, часто используется в области вычислений так называемых быстрых алгоритмов, которые изучают алгоритмы вычисления заданной функции с заданной точностью с использованием как можно меньшего числа битовых операций.

Битовая операция в теории алгоритмов запись знаков 0, 1, плюс, минус, скобка; сложение, вычитание и умножение двух битов (числа записаны в двоичной системе счисления)[8][9]. Используется для оценки сложности алгоритма.

Связь с другими науками

Битовые операции и математическая логика

Битовые операции очень близки (хотя и не тождественны) логическим связкам в классической логике. Бит можно рассматривать как логическое суждение — его значениями являются 1 «истина» и 0 «ложь». При такой интерпретации известные в логике связки конъюнкции, дизъюнкции, импликации, отрицания и другие имеют представление на языке битов. И наоборот, битовые операции легко описываются на языке исчисления высказываний.

Однако, связкам математической логики более соответствуют логические операции в том числе в программировании, нежели собственно битовые операции.

Обобщение операций на булеву алгебру

Вместо одиночных битов мы можем рассмотреть векторы из фиксированного количества битов (в программировании их называют регистрами), например, байты. В программировании регистры рассматривают как двоичное разложение целого числа: <math>b = b_0 + 2 b_1 + 2^2 b_2 + ... + 2^{N-1} b_{N-1}</math>, где N — количество битов в регистре.

Тем не менее, ничто не мешает рассматривать эти регистры именно как битовые векторы и проводить булевые операции покомпонентно (бит номер k значения есть результат операции от битов номер k аргументов). Кстати, математически говоря, булевы операции распространяются таким образом на произвольную булеву алгебру. Таким образом мы получаем операции побитового И, ИЛИ, НЕ, искл. ИЛИ и т. д. Как арифметические, данные операции не обладают хорошими свойствами за исключением побитового НЕ, которое для чисел в дополнительном коде совпадает с вычитанием из −1 (~x == -1-x). Однако, они очень полезны в программировании.

2-адическая интерпретация

Целое число, записанное (в дополнительном коде) в бесконечный (в сторону положительных степеней двойки) двоичный регистр является естественным объектом для теории p-адических чисел при <math>p=2</math>. Множество целых 2-адических чисел (то есть произвольных бесконечных битовых последовательностей) может быть рассмотрено как булева алгебра точно так же как и множество значений битового регистра конечной длины. Все вышеперечисленные битовые операции оказываются непрерывными отображениями. Хотя практическое программирование не располагает регистрами бесконечной длины, это не мешает использовать данный теоретический факт в криптографии для создания быстродействующих алгоритмов шифрования.

Битовые операции как основа цифровой техники

Битовые операции лежат в основе обработки цифровых сигналов. А именно, посредством них мы можем из одного или нескольких сигналов на входе получить новый сигнал, который в свою очередь может быть подан на вход одной или нескольким таким операциям. По сути, именно битовые операции в сочетании с запоминающими элементами (напр. триггерами) реализуют всё богатство возможностей современной цифровой техники.

Практические применения

С точки зрения применения отдельная битовая операция мало интересна. Поэтому практическое применение основывается на способах комбинирования различных битовых операций, для реализации более сложного вычисления. Можно отметить два аспекта:

  1. увеличение размера регистров, в которых битовые операции выполняются не по одной, а сразу на множестве 8, 16, 32, 64 битах
  2. экспериментальные устройства, где обобщают битовые операции с двоичной системы, на троичные и прочие системы счисления (так например, разработана теория работы с четверичной системой (ДНК-компьютер), так же делаются исследования в области квантового компьютера).

Физическая реализация битовых операций

Реализация битовых операций может в принципе быть любой: механической (в том числе гидравлической и пневматической), химической, тепловой,[10] электрической, магнитной и электромагнитной (диапазоны — ИК, видимый оптический, УФ и далее по убыванию длин волн), а также в виде комбинаций, например, электромеханической.

В первой половине XX века до изобретения транзисторов применяли электромеханические реле и электронные лампы.

В пожароопасных и взрывоопасных условиях до сих пор применяют пневматические логические устройства (пневмоника).

Наиболее распространены электронные реализации битовых операций при помощи транзисторов, например резисторно-транзисторная логика (РТЛ), диодно-транзисторная логика (ДТЛ), эмиттерно-связанная логика (ЭСЛ), транзисторно-транзисторная логика (ТТЛ), N-МОП-логика, КМОП-логика и др.

В квантовых вычислениях из перечисленных булевых операций реализуются только НЕ и искл. ИЛИ (с некоторыми оговорками). Квантовых аналогов И, ИЛИ и т. д. не существует.

Схемы аппаратной логики

Результат операции ИЛИ-НЕ или ИЛИ от всех битов двоичного регистра проверяет, равно ли значение регистра нулю; то же самое, взятое от выхода искл. ИЛИ двух регистров, проверяет равенство их значений между собой.

Битовые операции применяются в знакогенераторах и графических адаптерах; особенно велика была их роль в адаптере EGA в режимах с 16 цветами — хитроумное сочетание аппаратной логики адаптера с логическими командами центрального процессора позволяет рассматривать EGA как первый в истории графический ускоритель.

Использование в программировании

Благодаря реализации в арифметическом логическом устройстве (АЛУ) процессора многие регистровые битовые операции аппаратно доступны в языках низкого уровня. В большинстве процессоров реализованы в качестве инструкции регистровый НЕ; регистровые двухаргументные И, ИЛИ, исключающее ИЛИ; проверка равенства нулю (см. выше); три типа битовых сдвигов, а также циклические битовые сдвиги.

Регистровая операция И используется для:

  • проверки бита на 0 или 1
  • установки 0 в указанный бит (сброса бита)

Регистровая операция ИЛИ используется для:

  • установки 1 в указанный бит

Регистровая операция исключающее ИЛИ используется для инвертирования битов регистра по маске.

Сдвиг влево/вправо используется для умножения/целочисленного деления на 2 и выделения отдельных битов.

Так, например, в сетевых интернет-технологиях операция И между значением IP-адреса и значением маски подсети используется для определения принадлежности данного адреса к подсети.

См. также

Напишите отзыв о статье "Битовые операции"

Примечания

  1. [www.emanual.ru/download/1255.html Язык ассемблера микропроцессора 8086]
  2. [www.codenet.ru/progr/asm/tasm/36.php Умножение и деление] // [www.codenet.ru/progr/asm/tasm/ Справочник по системе программирования Турбо Ассемблер] / Под ред. С. Б. Орлова.
  3. [publibfi.boulder.ibm.com/epubs/pdf/ibm3lr40.pdf PL/I Language Reference] — с. 393
  4. [java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#51035 The Java Language Specification. Integer Operations]
  5. [www.freepascal.org/docs-html/ref/refsu30.html Free Pascal: Reference guide. Logical operators]
  6. [publibfi.boulder.ibm.com/epubs/pdf/ibm3lr40.pdf PL/I Language Reference]
  7. [www.gprolog.org/manual/gprolog.html#htoc87 GNU-Prolog Manual. Arithmetic]
  8. Карацуба Е. А. [www.ccas.ru/personal/karatsuba/alg.htm Быстрые алгоритмы и метод БВЕ] — 2008
  9. Ященко В. В. (ред.) [nature.web.ru/db/msg.html?mid=1157083&uri=node31.html Введение в криптографию] — 2000
  10. [lenta.ru/news/2007/11/05/heat/_Printed.htm Создан логический вентиль для теплового компьютера] // Lenta.ru. — Вып. 05.11.2007.

Отрывок, характеризующий Битовые операции

Главноуправляющий выразил большое сочувствие намерениям Пьера; но заметил, что кроме этих преобразований необходимо было вообще заняться делами, которые были в дурном состоянии.
Несмотря на огромное богатство графа Безухого, с тех пор, как Пьер получил его и получал, как говорили, 500 тысяч годового дохода, он чувствовал себя гораздо менее богатым, чем когда он получал свои 10 ть тысяч от покойного графа. В общих чертах он смутно чувствовал следующий бюджет. В Совет платилось около 80 ти тысяч по всем имениям; около 30 ти тысяч стоило содержание подмосковной, московского дома и княжон; около 15 ти тысяч выходило на пенсии, столько же на богоугодные заведения; графине на прожитье посылалось 150 тысяч; процентов платилось за долги около 70 ти тысяч; постройка начатой церкви стоила эти два года около 10 ти тысяч; остальное около 100 та тысяч расходилось – он сам не знал как, и почти каждый год он принужден был занимать. Кроме того каждый год главноуправляющий писал то о пожарах, то о неурожаях, то о необходимости перестроек фабрик и заводов. И так, первое дело, представившееся Пьеру, было то, к которому он менее всего имел способности и склонности – занятие делами.
Пьер с главноуправляющим каждый день занимался . Но он чувствовал, что занятия его ни на шаг не подвигали дела. Он чувствовал, что его занятия происходят независимо от дела, что они не цепляют за дело и не заставляют его двигаться. С одной стороны главноуправляющий выставлял дела в самом дурном свете, показывая Пьеру необходимость уплачивать долги и предпринимать новые работы силами крепостных мужиков, на что Пьер не соглашался; с другой стороны, Пьер требовал приступления к делу освобождения, на что управляющий выставлял необходимость прежде уплатить долг Опекунского совета, и потому невозможность быстрого исполнения.
Управляющий не говорил, что это совершенно невозможно; он предлагал для достижения этой цели продажу лесов Костромской губернии, продажу земель низовых и крымского именья. Но все эти операции в речах управляющего связывались с такою сложностью процессов, снятия запрещений, истребований, разрешений и т. п., что Пьер терялся и только говорил ему:
– Да, да, так и сделайте.
Пьер не имел той практической цепкости, которая бы дала ему возможность непосредственно взяться за дело, и потому он не любил его и только старался притвориться перед управляющим, что он занят делом. Управляющий же старался притвориться перед графом, что он считает эти занятия весьма полезными для хозяина и для себя стеснительными.
В большом городе нашлись знакомые; незнакомые поспешили познакомиться и радушно приветствовали вновь приехавшего богача, самого большого владельца губернии. Искушения по отношению главной слабости Пьера, той, в которой он признался во время приема в ложу, тоже были так сильны, что Пьер не мог воздержаться от них. Опять целые дни, недели, месяцы жизни Пьера проходили так же озабоченно и занято между вечерами, обедами, завтраками, балами, не давая ему времени опомниться, как и в Петербурге. Вместо новой жизни, которую надеялся повести Пьер, он жил всё тою же прежней жизнью, только в другой обстановке.
Из трех назначений масонства Пьер сознавал, что он не исполнял того, которое предписывало каждому масону быть образцом нравственной жизни, и из семи добродетелей совершенно не имел в себе двух: добронравия и любви к смерти. Он утешал себя тем, что за то он исполнял другое назначение, – исправление рода человеческого и имел другие добродетели, любовь к ближнему и в особенности щедрость.
Весной 1807 года Пьер решился ехать назад в Петербург. По дороге назад, он намеревался объехать все свои именья и лично удостовериться в том, что сделано из того, что им предписано и в каком положении находится теперь тот народ, который вверен ему Богом, и который он стремился облагодетельствовать.
Главноуправляющий, считавший все затеи молодого графа почти безумством, невыгодой для себя, для него, для крестьян – сделал уступки. Продолжая дело освобождения представлять невозможным, он распорядился постройкой во всех имениях больших зданий школ, больниц и приютов; для приезда барина везде приготовил встречи, не пышно торжественные, которые, он знал, не понравятся Пьеру, но именно такие религиозно благодарственные, с образами и хлебом солью, именно такие, которые, как он понимал барина, должны были подействовать на графа и обмануть его.
Южная весна, покойное, быстрое путешествие в венской коляске и уединение дороги радостно действовали на Пьера. Именья, в которых он не бывал еще, были – одно живописнее другого; народ везде представлялся благоденствующим и трогательно благодарным за сделанные ему благодеяния. Везде были встречи, которые, хотя и приводили в смущение Пьера, но в глубине души его вызывали радостное чувство. В одном месте мужики подносили ему хлеб соль и образ Петра и Павла, и просили позволения в честь его ангела Петра и Павла, в знак любви и благодарности за сделанные им благодеяния, воздвигнуть на свой счет новый придел в церкви. В другом месте его встретили женщины с грудными детьми, благодаря его за избавление от тяжелых работ. В третьем именьи его встречал священник с крестом, окруженный детьми, которых он по милостям графа обучал грамоте и религии. Во всех имениях Пьер видел своими глазами по одному плану воздвигавшиеся и воздвигнутые уже каменные здания больниц, школ, богаделен, которые должны были быть, в скором времени, открыты. Везде Пьер видел отчеты управляющих о барщинских работах, уменьшенных против прежнего, и слышал за то трогательные благодарения депутаций крестьян в синих кафтанах.
Пьер только не знал того, что там, где ему подносили хлеб соль и строили придел Петра и Павла, было торговое село и ярмарка в Петров день, что придел уже строился давно богачами мужиками села, теми, которые явились к нему, а что девять десятых мужиков этого села были в величайшем разорении. Он не знал, что вследствие того, что перестали по его приказу посылать ребятниц женщин с грудными детьми на барщину, эти самые ребятницы тем труднейшую работу несли на своей половине. Он не знал, что священник, встретивший его с крестом, отягощал мужиков своими поборами, и что собранные к нему ученики со слезами были отдаваемы ему, и за большие деньги были откупаемы родителями. Он не знал, что каменные, по плану, здания воздвигались своими рабочими и увеличили барщину крестьян, уменьшенную только на бумаге. Он не знал, что там, где управляющий указывал ему по книге на уменьшение по его воле оброка на одну треть, была наполовину прибавлена барщинная повинность. И потому Пьер был восхищен своим путешествием по именьям, и вполне возвратился к тому филантропическому настроению, в котором он выехал из Петербурга, и писал восторженные письма своему наставнику брату, как он называл великого мастера.
«Как легко, как мало усилия нужно, чтобы сделать так много добра, думал Пьер, и как мало мы об этом заботимся!»
Он счастлив был выказываемой ему благодарностью, но стыдился, принимая ее. Эта благодарность напоминала ему, на сколько он еще больше бы был в состоянии сделать для этих простых, добрых людей.
Главноуправляющий, весьма глупый и хитрый человек, совершенно понимая умного и наивного графа, и играя им, как игрушкой, увидав действие, произведенное на Пьера приготовленными приемами, решительнее обратился к нему с доводами о невозможности и, главное, ненужности освобождения крестьян, которые и без того были совершенно счастливы.
Пьер втайне своей души соглашался с управляющим в том, что трудно было представить себе людей, более счастливых, и что Бог знает, что ожидало их на воле; но Пьер, хотя и неохотно, настаивал на том, что он считал справедливым. Управляющий обещал употребить все силы для исполнения воли графа, ясно понимая, что граф никогда не будет в состоянии поверить его не только в том, употреблены ли все меры для продажи лесов и имений, для выкупа из Совета, но и никогда вероятно не спросит и не узнает о том, как построенные здания стоят пустыми и крестьяне продолжают давать работой и деньгами всё то, что они дают у других, т. е. всё, что они могут давать.


В самом счастливом состоянии духа возвращаясь из своего южного путешествия, Пьер исполнил свое давнишнее намерение заехать к своему другу Болконскому, которого он не видал два года.
Богучарово лежало в некрасивой, плоской местности, покрытой полями и срубленными и несрубленными еловыми и березовыми лесами. Барский двор находился на конце прямой, по большой дороге расположенной деревни, за вновь вырытым, полно налитым прудом, с необросшими еще травой берегами, в середине молодого леса, между которым стояло несколько больших сосен.
Барский двор состоял из гумна, надворных построек, конюшень, бани, флигеля и большого каменного дома с полукруглым фронтоном, который еще строился. Вокруг дома был рассажен молодой сад. Ограды и ворота были прочные и новые; под навесом стояли две пожарные трубы и бочка, выкрашенная зеленой краской; дороги были прямые, мосты были крепкие с перилами. На всем лежал отпечаток аккуратности и хозяйственности. Встретившиеся дворовые, на вопрос, где живет князь, указали на небольшой, новый флигелек, стоящий у самого края пруда. Старый дядька князя Андрея, Антон, высадил Пьера из коляски, сказал, что князь дома, и проводил его в чистую, маленькую прихожую.
Пьера поразила скромность маленького, хотя и чистенького домика после тех блестящих условий, в которых последний раз он видел своего друга в Петербурге. Он поспешно вошел в пахнущую еще сосной, не отштукатуренную, маленькую залу и хотел итти дальше, но Антон на цыпочках пробежал вперед и постучался в дверь.
– Ну, что там? – послышался резкий, неприятный голос.
– Гость, – отвечал Антон.
– Проси подождать, – и послышался отодвинутый стул. Пьер быстрыми шагами подошел к двери и столкнулся лицом к лицу с выходившим к нему, нахмуренным и постаревшим, князем Андреем. Пьер обнял его и, подняв очки, целовал его в щеки и близко смотрел на него.
– Вот не ждал, очень рад, – сказал князь Андрей. Пьер ничего не говорил; он удивленно, не спуская глаз, смотрел на своего друга. Его поразила происшедшая перемена в князе Андрее. Слова были ласковы, улыбка была на губах и лице князя Андрея, но взгляд был потухший, мертвый, которому, несмотря на видимое желание, князь Андрей не мог придать радостного и веселого блеска. Не то, что похудел, побледнел, возмужал его друг; но взгляд этот и морщинка на лбу, выражавшие долгое сосредоточение на чем то одном, поражали и отчуждали Пьера, пока он не привык к ним.
При свидании после долгой разлуки, как это всегда бывает, разговор долго не мог остановиться; они спрашивали и отвечали коротко о таких вещах, о которых они сами знали, что надо было говорить долго. Наконец разговор стал понемногу останавливаться на прежде отрывочно сказанном, на вопросах о прошедшей жизни, о планах на будущее, о путешествии Пьера, о его занятиях, о войне и т. д. Та сосредоточенность и убитость, которую заметил Пьер во взгляде князя Андрея, теперь выражалась еще сильнее в улыбке, с которою он слушал Пьера, в особенности тогда, когда Пьер говорил с одушевлением радости о прошедшем или будущем. Как будто князь Андрей и желал бы, но не мог принимать участия в том, что он говорил. Пьер начинал чувствовать, что перед князем Андреем восторженность, мечты, надежды на счастие и на добро не приличны. Ему совестно было высказывать все свои новые, масонские мысли, в особенности подновленные и возбужденные в нем его последним путешествием. Он сдерживал себя, боялся быть наивным; вместе с тем ему неудержимо хотелось поскорей показать своему другу, что он был теперь совсем другой, лучший Пьер, чем тот, который был в Петербурге.
– Я не могу вам сказать, как много я пережил за это время. Я сам бы не узнал себя.
– Да, много, много мы изменились с тех пор, – сказал князь Андрей.
– Ну а вы? – спрашивал Пьер, – какие ваши планы?
– Планы? – иронически повторил князь Андрей. – Мои планы? – повторил он, как бы удивляясь значению такого слова. – Да вот видишь, строюсь, хочу к будущему году переехать совсем…
Пьер молча, пристально вглядывался в состаревшееся лицо (князя) Андрея.
– Нет, я спрашиваю, – сказал Пьер, – но князь Андрей перебил его:
– Да что про меня говорить…. расскажи же, расскажи про свое путешествие, про всё, что ты там наделал в своих именьях?
Пьер стал рассказывать о том, что он сделал в своих имениях, стараясь как можно более скрыть свое участие в улучшениях, сделанных им. Князь Андрей несколько раз подсказывал Пьеру вперед то, что он рассказывал, как будто всё то, что сделал Пьер, была давно известная история, и слушал не только не с интересом, но даже как будто стыдясь за то, что рассказывал Пьер.
Пьеру стало неловко и даже тяжело в обществе своего друга. Он замолчал.
– А вот что, душа моя, – сказал князь Андрей, которому очевидно было тоже тяжело и стеснительно с гостем, – я здесь на биваках, и приехал только посмотреть. Я нынче еду опять к сестре. Я тебя познакомлю с ними. Да ты, кажется, знаком, – сказал он, очевидно занимая гостя, с которым он не чувствовал теперь ничего общего. – Мы поедем после обеда. А теперь хочешь посмотреть мою усадьбу? – Они вышли и проходили до обеда, разговаривая о политических новостях и общих знакомых, как люди мало близкие друг к другу. С некоторым оживлением и интересом князь Андрей говорил только об устраиваемой им новой усадьбе и постройке, но и тут в середине разговора, на подмостках, когда князь Андрей описывал Пьеру будущее расположение дома, он вдруг остановился. – Впрочем тут нет ничего интересного, пойдем обедать и поедем. – За обедом зашел разговор о женитьбе Пьера.
– Я очень удивился, когда услышал об этом, – сказал князь Андрей.
Пьер покраснел так же, как он краснел всегда при этом, и торопливо сказал:
– Я вам расскажу когда нибудь, как это всё случилось. Но вы знаете, что всё это кончено и навсегда.
– Навсегда? – сказал князь Андрей. – Навсегда ничего не бывает.
– Но вы знаете, как это всё кончилось? Слышали про дуэль?
– Да, ты прошел и через это.
– Одно, за что я благодарю Бога, это за то, что я не убил этого человека, – сказал Пьер.
– Отчего же? – сказал князь Андрей. – Убить злую собаку даже очень хорошо.
– Нет, убить человека не хорошо, несправедливо…
– Отчего же несправедливо? – повторил князь Андрей; то, что справедливо и несправедливо – не дано судить людям. Люди вечно заблуждались и будут заблуждаться, и ни в чем больше, как в том, что они считают справедливым и несправедливым.
– Несправедливо то, что есть зло для другого человека, – сказал Пьер, с удовольствием чувствуя, что в первый раз со времени его приезда князь Андрей оживлялся и начинал говорить и хотел высказать всё то, что сделало его таким, каким он был теперь.
– А кто тебе сказал, что такое зло для другого человека? – спросил он.