Они не одинаковы. Один из них - побитовое ИЛИ, а другой - логическое ИЛИ.
X || Y является логическим или означает то же самое, что и «X или Y», и применяется к значениям типа bool. Он используется в условных выражениях или тестах. X и Y в этом случае могут быть заменены любым выражением, которое оценивается как bool. Пример:
if (File.Exists("List.txt") || x > y ) { ..}
Предложение оценивается как истинное, если выполняется одно из двух условий. Если первое условие истинно (если файл существует), то второе условие не требуется и не будет оцениваться.
Единственная вертикальная черта (|) - это побитовое ИЛИ. Чтобы понять, что это означает, вы должны понимать, как числа хранятся в компьютере. Предположим, у вас есть 16-битное количество (Int16), которое содержит значение 15. Фактически оно хранится как 0x000F (в шестнадцатеричном формате), что совпадает с 0000 0000 0000 1111 в двоичном формате. Поразрядное ИЛИ принимает две величины и каждую пару соответствующих битов вместе, так что, если бит равен 1 в любом количестве, в результате он равен 1. Следовательно, если a = 0101 0101 0101 0101 (что равно 0x5555 в шестнадцатеричном формате) и b = 1010 1010 1010 1010 (что равно 0xAAAA), то a | б = 1111 1111 1111 1111 = 0xFFFF.
Вы можете использовать побитовое ИЛИ (одиночный канал) в C #, чтобы проверить, включен ли один или несколько из определенного набора битов. Вы можете сделать это, если у вас есть, скажем, 12 логических или двоичных значений для проверки, и все они независимы. Предположим, у вас есть студенческая база данных. Набор независимых логических значений может быть таким, как мужчина / женщина, дом / в кампусе, текущий / не текущий, зарегистрирован / не зарегистрирован и т. Д. Вместо того, чтобы хранить логическое поле для каждого из этих значений, вы можете сохранить только один бит для каждого. Мужчина / женщина может быть бит 1. зарегистрирован / не может быть бит 2.
Тогда вы можете использовать
if ((bitfield | 0x0001) == 0x0001) { ... }
в качестве теста, чтобы увидеть, не включены ли какие-либо биты, кроме бита «студент - мужчина», который игнорируется. Хм? Что ж, побитовое ИЛИ возвращает 1 для каждого бита, который присутствует в любом числе. Если результат побитового ИЛИ выше = 0x0001, это означает, что в битовом поле нет битов, кроме возможно первого бита (0x0001), но вы не можете точно сказать, был ли первый бит бит включен, потому что он замаскирован.
Есть соответствующие && и &, которые являются логическим И и побитовым И. У них аналогичное поведение.
Ты можешь использовать
if ((bitfield & 0x0001) == 0x0001) { ... }
чтобы увидеть, включен ли первый бит в битовом поле.
РЕДАКТИРОВАТЬ: Я не могу поверить, что меня проголосовали за это!
person
Cheeso
schedule
26.03.2009