Что такое | и ^ используются операторы?

Возможный дубликат:
Что такое побитовые операторы?

Недавно я наткнулся на несколько образцов, которые использовали | и ^. Я предполагаю, что это операторы or и negation.

Итак, что на самом деле стоят эти операторы?

Ответ 1

Если вы применяете его к целочисленным типам, они являются побитовым или или оператором xor. Однако, если вы применяете их к логическим типам, они являются логическими и/или xor. Посмотрите объяснение или оператора и оператор xor

Вы можете получить более подробную информацию о логических операциях из таблицы таблицы истинности

Ответ 2

  • |= (побитовое/не короткое замыкание) "или"
  • ^= "xor"

а для информации "нет" (побитовое отрицание) - ~

Ответ 3

MSDN имеет документацию по всем операторам С# по адресу:

http://msdn.microsoft.com/en-us/library/6a71f45d.aspx


EDIT - Jon B прокомментировал, что соответствующая цитата из связанной документации будет полезна.

| - Логический оператор OR.

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

^ - это Логический оператор XOR.

Операторы Binary ^ предопределены для интегральных типов и bool. Для интегральных типов ^ вычисляет побитовое исключающее ИЛИ своих операндов. Для операндов bool ^ вычисляет логическое исключение или его операнды; то есть результат верен тогда и только тогда, когда истинно один из его операндов.

Ответ 4

это логические побитовые операторы

| это ссылка

^ - это XOR ссылка

Ответ 5

С интегральными типами | является поразрядным или, ^ побитовым xor и для полноты и является поразменным и.

С булевыми типами | является булевым или, ^ булевым xor и булевым &.

Для сравнения, || является булевым замыканием или - если первый операнд оценивается как истинный, второй операнд не оценивается. && является булевым замыканием и - если первый операнд ложный, второй не оценивается. Нет короткого замыкания, потому что нет случая, когда второй не нужно оценивать.

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

Edit: источник потенциальной путаницы, заключается в том, что в некоторых других языках интегральные типы могут использоваться в качестве логических элементов (например, вы можете сделать if(53) и это то же самое, что и if(true)), что делает различия между вышеупомянутыми операторами вполне different: Они одинаковы, если используется "чисто" булевский тип (который имеет только true и false как возможные значения), но не иначе. С# намеренно не позволяет логические операции с интегральными типами точно предотвращать возможности ошибок, существующих на таких языках.

Ответ 6

^ Логический XOR

| Логический OR

обновление

в С# также выполняет свои логические операции:

    Console.WriteLine(true ^ false);  // logical exclusive-or
    Console.WriteLine(false ^ false); // logical exclusive-or