XOR двух коротких целых

Я рассчитываюXOR из двухshort integers с помощьюXOR ^ оператор по-традиционному. Ниже приведен метод

short a=197;
short b=341;
short y = (short) (a ^ b);

Однако XOR всегда возвращал целое число, но в моем случае входные данные были короткими целыми числами, поэтому я приводил к короткому выводу XOR. XOR можно рассчитать по-разному (пример: использованиеBigInteger и т.д.) но с точки зрения производительности (меньше времени), что лучше для коротких целых чисел? Принимая во внимание производительность, я должен сначала преобразовать каждое короткое целое в двоичное число, используяInteger.toBinaryString(number) затем применить побитовый XOR?

Ответы на вопрос(3)

Решение Вопроса
short s1 = ...
short s2 = ...
short result = (short) (s1 ^ s2);

shortвместе. Это не сталкивается с накладными расходами созданияBigIntegers и приведение никогда не вызовет проблему переполнения, так как обаs1 а такжеs2 находятсяshortс начала.

Java приводит оба операнда к типу int. Вот почему результат Int.

http://java.comsci.us/syntax/expression/bitwisexor.html

поэтому ваши шорты будут автоматически преобразованы в целое число, и операция XOR будет выполнена очень эффективно для целочисленных операндов.

Если один из операндов является длинным, оба типа вместо этого приводятся к длинному. Однако это не относится к вашему делу.

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

short result = (short) (operandA ^ operandB);

что вы имеете в виду под «преобразованием каждого короткого целого числа в двоичное число» - шорт - это уже число, и его представление в любом случае естественно двоичное.

Вы просто хотите:

short x = ...;
short y = ...;
short z = (short) (x ^ y);

Вам нужен актерский состав какx ^ y будет способствовать какintи результатом будетint, Тем не менее, результат должен быть в диапазонеshort во всяком случае, так что это безопасно выполнять этот акт без потери информации.

Видетьраздел 15.22.1 JLS для получения дополнительной информации о XOR в частности ираздел 5.6.2 для информации о двоичном числовом продвижении в целом.

 Ravi Joshi25 мар. 2012 г., 11:02
@JonSkeet: Да, я получил это сейчас. благодарю вас.short c = (short) (a ^ b); :) Огромное спасибо.
 Jon Skeet24 мар. 2012 г., 23:21
@EricJ .: Вы все еще искали версию, где у меня не было круглых скобок?(x ^ y)? Я исправил это некоторое время назад :)
 Jon Skeet25 мар. 2012 г., 10:21
@RaviJoshi: Почему вы хотите это сделать? Зачем преобразовывать его в строку, если она уже находится в двоичной памяти?побитовое XOR подразумевает работу с битами, а не с символами, конечно ...
 Ravi Joshi25 мар. 2012 г., 09:35
@JonSkeet: "" преобразовывать каждое короткое целое в двоичное число "" я имел в виду, что сначала я должен преобразовать каждое короткое целое в двоичную строку, используяInteger.toBinaryString(number) затем применитьbitwise XOR?
 Eric J.24 мар. 2012 г., 23:22
Да, я вижу обновление. Отзыв комментария :-)

Ваш ответ на вопрос