Предположим, что у нас есть логическое изображение y
, и мы хотим сделать его копию. В чем разница между следующими словами:Различия между x = y и x = y == 1
x = y;
x = y==1;
Предположим, что у нас есть логическое изображение y
, и мы хотим сделать его копию. В чем разница между следующими словами:Различия между x = y и x = y == 1
x = y;
x = y==1;
x = y
является назначением. Он устанавливает переменную x
в значение, которое в настоящее время содержится в переменной y
.
x==y
является логическим оператором, спрашивающим: «Есть ли x
, равный y
»?
Оператор x=y==1
устанавливает все части x
истина где соответствующее значение y
равно 1
.
Разница между двумя заявлениями, которые вы ставите, заключается в том, что в первом заявлении x=y
, x
становится точной копией y
. Однако во втором утверждении x
становится логической матрицей с булевыми значениями. 1
, где y
содержит 1
и 0
, где y
содержит что-либо, кроме 1
.
В вашем конкретном случае, когда y
уже является логической матрицей (таким образом, содержащей только 1
и 0
) оба утверждения, таким образом, эквивалентно согласно выше, и тогда первое утверждению будет быстрее, так как проверка равенства является излишней и, таким образом, добавляет ненужные накладные расходы.
. Ваш ответ более общий, но в конкретном вопросе 'y' уже является логической матрицей, поэтому не будет никаких различий в результате , Однако 'x = y' прямо присваивает значения y x без проверки, тогда как' x = y == 1' должен проверить, равен ли y равен 1, а затем установить соответствующий индекс в 1. Поэтому я могу представить, что второй подход будет помедленнее. –
Если y является логическим массивом, оба оператора возвращают эквивалентные выходы. – Jonas
Второе назначение интерпретируется как 'x = (y == 1);' – patrik