Причина ошибки при использовании & amp; & amp; вместо & amp; в MatLaB? [Дубликат]

Существует простой способ тестирования низких скоростей на реальном устройстве, которое, похоже, было упущено. Для этого требуется подключение к сети Mac и ethernet (или другое проводное).

Включите совместное использование Wi-Fi на Mac, превратив ваш компьютер в точку доступа Wi-Fi, подключите ваше устройство к этому. Используйте Netlimiter / Charles Proxy или Network Link Conditioner (который вы, возможно, уже установили) для управления скоростями.

Для получения дополнительной информации и для понимания того, какие скорости вы должны проверить при проверке: http://opensignal.com/blog/2016/02/05/go-slow-how-why -в-тест-приложения-на-бедного-соединение /

77
задан horchler 26 April 2015 в 19:23
поделиться

7 ответов

Один амперсанд & amp; является логическим оператором И. Двойной амперсанд & amp; снова является логическим оператором И, который использует короткое замыкание. Короткое замыкание означает, что второй операнд (правая сторона) оценивается только тогда, когда результат не полностью определяется первым операндом (левая сторона)

A & amp; B (A и B оцениваются)

A & amp; & amp; B (B оценивается только, если A истинно)

86
ответ дан Fraser 15 August 2018 в 13:55
поделиться
  • 1
    Предостережение: & может работать на массивах, но && может работать только на скалярах. – gnovice 4 September 2009 в 15:41
  • 2
    Замечание: после 15 лет работы с Matlab почти ежедневно, я всегда использую '& amp;' и он никогда не укусил меня в задницу. OTOH, я знаю многих людей, которые раздражаются, используя «& amp; & amp;» потому что они должны помнить, что это не универсально (да, я понимаю, что «& amp;» не так эффективен, потому что он не замыкается на короткое замыкание, но я почти никогда не подключаю свои операнды, чтобы сбережения в наши дни были незначительными). – neuronet 3 October 2016 в 17:50
  • 3
    @neuronet это не совсем о эффективности, тем более, что она позволяет построить конструкцию, где первое выражение гарантирует условие, без которого второе выражение может вызвать ошибку во время выполнения. например d != 0 && 1/d vs d !=0 & 1/d - первое гарантирует отсутствие деления на ноль, второе - нет. – Fraser 14 November 2016 в 18:06

Хорошее эмпирическое правило при построении аргументов для использования в условных операторах (IF, WHILE и т. д.) должно всегда использовать & amp; & amp; / || формы, если нет веской причины не делать этого. Есть две причины ...

Как уже упоминалось, короткозамкнутое поведение & amp; / || аналогичен большинству C-подобных языков. То, что сходство / знакомство обычно считается точкой в ​​его пользу. Используя & amp; & amp; или || формы заставляет вас написать полный код для определения вашего намерения для векторных аргументов. Когда a = [1 0 0 1] и b = [0 1 0 1], является истинным или ложным? Я не могу вспомнить правила для MATLAB & amp ;, вы можете? Большинство людей не могут. С другой стороны, если вы используете & amp; & amp; или ||, вы FORCED, чтобы написать код «в полном объеме», чтобы разрешить условие.

Выполняя это, вместо того, чтобы полагаться на разрешение MATLAB векторов в & amp; и |, приводит к тому, что код немного более подробный, но LOT безопаснее и проще в обслуживании.

1
ответ дан Bob Gilmore 15 August 2018 в 13:55
поделиться
  • 1
    +1, но следует отметить, что ваш ответ применим только к случаям, когда вы хотите , чтобы конечный результат операции был скалярным. Существует много применений для & amp; и | где & amp; & amp; и || бесполезны, потому что они не могут возвращать массивы, например, когда делают фантастическое индексирование, например «выбирая все r между 1 и 2: r((r<2)&(r<2))». – Jonas Heidelberg 22 August 2011 в 23:01
  • 2
    Хорошо, Джонас. Я думал об условностях, а не о «логической индексации», (термин MATLAB для «причудливого индексирования», который вы упомянули), когда я это написал. Я изменил первое предложение своего сообщения, чтобы это отразить. Спасибо за напоминание! – Bob Gilmore 25 August 2011 в 06:42

Как и другие языки, '& amp;' является логическим побитовым оператором, тогда как '& amp; & amp;' является логической операцией.

Например (прошу простить мой синтаксис).

Если A = [True True False True] B = False

A & amp; B = [False False False False]

.. или если B = True A & amp; B = [True True False True]

Для «& amp; & amp;» правый операнд вычисляется только в том случае, если левый операнд имеет значение true, а результат представляет собой одно булево значение.

x = (b ~ = 0) & amp; & amp; (a / b> 18.5)

Надеюсь, это ясно.

5
ответ дан Erik Kerber 15 August 2018 в 13:55
поделиться
[D0] & Amp; & Amp; и || являются операторами короткого замыкания, работающими на скалярах. & Амп; и | всегда оценивайте оба операнда и работайте с массивами.

23
ответ дан gnovice 15 August 2018 в 13:55
поделиться
  • 1
    У вас есть какая-либо информация о том, какие сокращения в Matlab сокращают & и | в операциях if / while? Это не похоже на R2012b и R2014a. – Tim 22 January 2015 в 09:43
  • 2
    @Loren любая идея , почему они создали один для работы со скалярами? Кажется странным ... – neuronet 23 March 2015 в 15:37
23
ответ дан gnovice 5 September 2018 в 12:58
поделиться
23
ответ дан gnovice 27 October 2018 в 18:24
поделиться
23
ответ дан gnovice 28 October 2018 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: