Каково различие между | и || или операторы?

Попробуйте следующее:

p <- c("Hello", "H*llo")
grepl("\\*", p)

[1] FALSE  TRUE

Это работает, потому что звездочка * имеет особое значение в регулярном выражении. В частности, * означает найти нуль или более предыдущего элемента.

Таким образом, вам нужно избежать звездочки, используя \\*. Двойной побег необходим, потому что \ уже имеет значение escape в R.

288
задан Rory O'Kane 22 July 2013 в 21:05
поделиться

10 ответов

Точно так же, как & и && оператор, двойной Оператор является оператором "короткого замыкания".

, Например:

if(condition1 || condition2 || condition3)

, Если condition1 верен, условие 2 и 3 НЕ будет проверено.

if(condition1 | condition2 | condition3)

Это проверит условия 2 и 3, даже если 1 будет уже верно. Поскольку Ваши условия могут быть довольно дорогими функциями, можно получить хорошее повышение производительности при помощи их.

существует один большой протест, NullReferences или подобные проблемы. Например:

if(class != null && class.someVar < 20)

, Если класс является пустым, оператор "if" остановится, после class != null ложь. Если Вы только используете & это попытается проверить class.someVar, и Вы получаете хорошее NullReferenceException. С Или-оператором, который не может быть так большой частью прерывания, поскольку маловероятно, что Вы инициировали что-то плохо, но это - что-то для учета.

Никто никогда не использует сингл & или | операторы, хотя, если у Вас нет дизайна, где каждое условие является функцией, которая должна быть выполнена. Походит на запах дизайна, но иногда (редко) это - очевидный способ, чтобы сделать материал. & оператор действительно "выполняет эти 3 функции, и если один из них возвращает false, еще выполнитесь блок", в то время как эти | еще действительно "только работает блок, если ни один не возвращает false" - может быть полезным, но, как сказано, часто это - запах дизайна.

существует Второе использование | и & оператор хотя: Битовые операции .

467
ответ дан Zze 23 November 2019 в 01:46
поделиться

|| логическая операция ИЛИ. Это кажется, что Вы в основном знаете, каково это. Это используется в условных операторах такой, как будто, в то время как, и т.д.

condition1 || condition2

Оценивает к истинному, если или condition1 ИЛИ condition2 верны.

| оператор битового "ИЛИ". Это используется для работы на два числа. Вы смотрите на каждый бит каждого числа индивидуально и, если один из битов будет 1 в по крайней мере одном из чисел, то получающийся бит будет 1 также. Вот несколько примеров:

A = 01010101
B = 10101010
A | B = 11111111

A = 00000001
B = 00010000
A | B = 00010001

A = 10001011
B = 00101100

A | B = 10101111

, Надо надеяться, который имеет смысл.

Так для ответа на последние два вопроса я не сказал бы, что, кроме того, существуют любые протесты, "знают различие между этими двумя операторами". Они не являются взаимозаменяемыми, потому что они делают две совершенно других вещи.

77
ответ дан Evan Shaw 23 November 2019 в 01:46
поделиться

Каждый "поразрядный или".

10011b | 01000b => 11011b

другой логика или.

TRUE или FALSE => верный

29
ответ дан Rui Jarimba 23 November 2019 в 01:46
поделиться

Хороший вопрос. Эти два оператора работают то же в PHP и C#.

| битовое "ИЛИ". Это сравнит два значения их битами. Например, 1101 | 0010 = 1111. Это чрезвычайно полезно при использовании разрядных опций. Например, Чтение = 01 (0X01) Запись = 10 (0X02) Чтений-записей = 11 (0X03). Один полезный пример открыл бы файлы. Простой пример был бы:

File.Open(FileAccess.Read | FileAccess.Write);  //Gives read/write access to the file

|| логическое ИЛИ. Это - способ, которым думает большинство людей ИЛИ и сравнивает два значения на основе их истины. Например, Я иду в хранилище, или я перейду к торговому центру. Это - то, используемое чаще всего в коде. Например:

if(Name == "Admin" || Name == "Developer") { //allow access } //checks if name equals Admin OR Name equals Developer

Ресурс PHP: http://us3.php.net/language.operators.bitwise

Ресурсы C#: http://msdn.microsoft.com/en-us/library/kxszd0kx (По сравнению с 71) .aspx

http://msdn.microsoft.com/en-us/library/6373h346 (По сравнению с 71) .aspx

12
ответ дан krobelusmeetsyndra 23 November 2019 в 01:46
поделиться

Единственный канал, |, является одним из поразрядный операторы.

Из Википедии:

В семье языка программирования C, оператор битового "ИЛИ" "|" (канал). Снова, этот оператор не должен быть перепутан со своим булевым "логическим или" дубликатом, который рассматривает его операнды как булевы значения и записан "||" (два канала).

0
ответ дан codeLes 23 November 2019 в 01:46
поделиться

| оператор выполняет битовое "ИЛИ" своих двух операндов (значение, что обе стороны должны оценить ко лжи для него для возвращения false), в то время как || оператор только оценит второй оператор, если он должен будет.

http://msdn.microsoft.com/en-us/library/kxszd0kx (По сравнению с 71) .aspx

http://msdn.microsoft.com/en-us/library/6373h346 (По сравнению с 71) .aspx

-1
ответ дан homeskillet 23 November 2019 в 01:46
поделиться

Канал ожога "|" является "поразрядным" или и должен только использоваться, когда Вы знаете то, что Вы делаете. Двойной канал "||" является логическим или и может использоваться в логических операторах, как "x == 0 || x == 1".

Вот пример того, что поразрядное или делает: если a=0101 и b=0011, то a|b=0111. Если Вы будете иметь дело с логической системой, которая рассматривает любого ненулевого как верного, то поразрядное или будет действовать таким же образом как логическое или, но это - дубликат (поразрядно и, "&";) НЕ будет. Также поразрядное или не выполняет оценку короткого замыкания.

-1
ответ дан Kyle Cronin 23 November 2019 в 01:46
поделиться

Единственный канал (|) оператор .

битового "ИЛИ", Два канала (||) являются логической операцией ИЛИ.

Они не являются взаимозаменяемыми.

-2
ответ дан Dane 23 November 2019 в 01:46
поделиться

|| (два канала) обычно логичны или в то время как | (один канал) двоичный файл или. Первое, что пришло на ум я не могу думать ни о каком времени, различием был бы большой глюк (кроме того, когда Вы присваиваете результат чему-то еще). Однако я уверенный у кого-то еще будет ситуация, где она имеет значение.

Редактирование: Ничего себе, шесть других ответов во время это взяло меня для записи этого.

-2
ответ дан David Locke 23 November 2019 в 01:46
поделиться

Побитовое (|) vs . логический (||)! Думайте о логике как о Сравнимых объектах в Java, сравнивая некоторые различимые «части», в то время как побитовый оператор смотрит на эти объекты и вместо того, чтобы видеть, являются ли они визуально близнецами (как логический), делает образец ДНК и смотрит на 0 и 1 вместо этого.

-4
ответ дан 23 November 2019 в 01:46
поделиться
Другие вопросы по тегам:

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