2016-08-15 5 views
-1

Предположим, что у нас есть логическое изображение y, и мы хотим сделать его копию. В чем разница между следующими словами:Различия между x = y и x = y == 1

x = y; 

x = y==1; 
+3

Если y является логическим массивом, оба оператора возвращают эквивалентные выходы. – Jonas

+0

Второе назначение интерпретируется как 'x = (y == 1);' – patrik

ответ

4

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) оба утверждения, таким образом, эквивалентно согласно выше, и тогда первое утверждению будет быстрее, так как проверка равенства является излишней и, таким образом, добавляет ненужные накладные расходы.

+0

. Ваш ответ более общий, но в конкретном вопросе 'y' уже является логической матрицей, поэтому не будет никаких различий в результате , Однако 'x = y' прямо присваивает значения y x без проверки, тогда как' x = y == 1' должен проверить, равен ли y равен 1, а затем установить соответствующий индекс в 1. Поэтому я могу представить, что второй подход будет помедленнее. –