Являются ли "добавлением" и "поразрядными" или "одинаковыми" в этом случае?
Скажем, у меня есть четыре 32-битных числа, которые определены так, что их биты не перекрываются, т.е.
unsigned long int num0 = 0xFF000000;
unsigned long int num1 = 0x00FF0000;
unsigned long int num2 = 0x0000FF00;
unsigned long int num3 = 0x000000FF;
Где в каждом номере может быть что-то вместо FF
s.
Правильно ли я говорю, что добавление и побитовое выражение или всегда будут давать одинаковый результат для такого рода чисел?
Спасибо!
Ответы
Ответ 1
поскольку для двух чисел num1 и num2 применяется num1 & num2 == 0
, а затем:
num1 + num2 == num1 | num2
причина этого заключается в том, что добавление в основном является побитым XOR, плюс бит переноса. Но до тех пор, пока нет битов переноса (num1 & num2 == 0
), добавление сводится к побитому XOR, который (опять же из-за num1 & num2 == 0
) в этом случае логически эквивалентен побитому OR
Ответ 2
Да, как (поразрядный) 0+1
совпадает с 0|1
. Единственное отличие - 1|1 (=1)
vs. 1+1(=0b10)
, т.е. Создать 0 и иметь переполнение, влияющее на биты влево).
Итак, в вашем случае оба эквивалентны. Но вы должны пойти в безопасную сторону и выбрать менее подверженную ошибкам.
Ответ 3
<Не p > Нет:
num3 + num3 => 0x000001FE
num3 | num3 => 0x000000FF
Конечно, до тех пор, пока вы убедитесь, что вы только добавляете вещи вместе, когда знаете, что у них нет одинаковых битов, вы должны быть в безопасности.
Ответ 4
Пока вы не делаете что-то вроде num3 + num3
, да.
Ответ 5
Всякий раз, когда побитовое добавление добавляет больше одного (либо потому, что источники имеют их, либо перенос из другого места тоже 1), тогда производится перенос, а одно место влияет на другое. До тех пор, пока в добавлении добавлено не более одного добавленного значения, все будет таким же, как поразрядное.
Это также можно увидеть, когда мы смотрим на схемы сумматора (http://en.wikipedia.org/wiki/Adder_%28electronics%29), где, когда не производится перенос, все элементы, участвующие в схеме, "или".
Ответ 6
Дополнение и бит-муд или будет таким же, как бит, или будет включать в себя любые биты, и нормальное добавление будет делать то же самое, что и взаимно исключающий характер ваших битов.