Это звучит так, будто вы не понимаете, как работает булева арифметика? Если это ваш вопрос, он работает следующим образом:
0xEO
и 0x1F
являются шестнадцатеричными представлениями чисел. Если перевести эти цифры в двоичном они будут:
0xE0 = 11100000
0x1F = 00011111
Кроме & (и) и | (или) являются побитовыми логическими операторами. Чтобы понять логические операторы, сначала запомните 1 = true и 0 = false.
Таблица истинности для & является:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
Таблица истинности для | это:
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
Итак, давайте разложим ваше уравнение по частям. Сначала мы сначала оценим код в скобках. Мы будем проходить через каждое число в двоичном формате и для оператора &, если каждый операнд имеет 1 в той же позиции бита, которую мы вернем 1. Если либо номер имеет 0, то мы вернем 0. После того, как мы закончим оценку операндов в в скобках мы возьмем 2 результирующих числа и применим | оператором по биту. Если какой-либо номер имеет 1 в той же битовой позиции мы будем возвращать 1. Если оба числа имеют в той же позиции бита в 0 мы возвратимся 0.
Ради обсуждения, давайте скажем, что
xByte = 255 or (FF in hex and 11111111 in binary)
yByte = 0 or (00 in hex and 00000000 in binary)
При применении & и | операторов мы будем сравнивать каждый бит поштучно:
zByte = (xByte & 0xEO) | (yByte & 0x1F)
становится:
zByte = (11111111 & 11100000) | (00000000 & 00011111)
zByte = 111000000 | 00000000
zByte = 11100000
Если вы понимаете это, и как логическое логика работает, то вы можете использовать Marc Gravell «s ответ.
'C#' или 'Java'? Выбери один. И что вы пробовали до сих пор? –
Слияние означает конкатенацию, И? ИЛИ? –
Я знаю как Java, так и C#, не имеет значения, на каком языке я бы получил ответ. Я могу интерпретировать его на другом языке. Я знаю что-то вроде ниже, чтобы выбрать 3 бита из первого и 5 из второго (что я наблюдал в алгоритме шифрования DES) zByte = (xByte & 0xE0) | (yByte & 0x1F); Но я не знаю математики, почему мы должны использовать E0 и 1F в этом случае. Поэтому я пытаюсь понять детали в отношении каждого бита. @RajeshSubramanian Я имею в виду конкатенацию. –