2010-07-22 16 views
5

Co to jest operator poniżej ^? Kiedy go używać?Kiedy używać operatora "^"

Mój język programowania to C#.

+3

Google lub MSDN w tym przypadku jest Twoim przyjacielem: http://msdn.microsoft.com/en-us/library/zkacc7k1%28VS.71%29.aspx. Aby odpowiedzieć na drugie pytanie, korzystasz z operatora, gdy potrzebujesz to, tak jak np. operator '+'. – stakx

+0

Google nie jest odpowiedzią, MSDN to jednak http://meta.stackexchange.com/questions/8724/how-to-deal-with-google-questions – Bobby

+6

Jeśli nie wie, czego szuka, Google może być trudne, zwłaszcza, że ​​Google nawet nie rozpoznaje znaku ^. Poza tym on również chce wiedzieć "kiedy go użyć", czego nie ma lepszego miejsca niż StackOverflow –

Odpowiedz

9

^ jest logiczna XOR Operator jeśli argumenty są bools, w przeciwnym razie jest to bitowe XOR Operator

binarne^operatorzy są predefiniowane dla integralnych typach i bool. Dla typów całkowitych^oblicza bitowe exclusive-OR swoich operandów. Dla operandów logicznych,^oblicza logiczne wyłączne - lub jego operandy; to znaczy, wynik jest prawdziwy wtedy i tylko wtedy, gdy dokładnie jeden z jego argumentów jest prawdziwy.

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

+4

"Logiczny operator XOR." - To jest prawdziwe tylko wtedy, gdy operandy są operatory, w przeciwnym razie jest to bitowy operator. Granie szybko i luźno z terminami "bitowy" i "logiczny" sprawia, że ​​życie jest bardzo trudne, kiedy przychodzi wyjaśnić różnicę między & i && w "C" ... –

+0

@Will Dean: Dzięki za wyjaśnienie. – sshow

3

To operator XOR. Jest używany w operacjach bitowych, gdzie wynik jest prawdziwy, jeśli lewa strona jest prawdziwa lub prawa strona jest prawdziwa, ale fałsz, jeśli zarówno są prawdziwe, jak i zarówno są fałszywe. Więc 0xf8^0x3f byłoby:

1111 1000 
0011 1111 
--------- 
1100 0111 

Który C7 w systemie szesnastkowym.

Ogólnie rzecz biorąc, jeśli nie robisz arytmetyki bitowej, nie musisz się o to martwić.

+0

Nie zapomniałeś dodać, że jest to również fałsz, jeśli BOTH jest fałszywe. –

0

myślę o nim jako binarna operatora podobnie jak || & &, etc ...

Gdybym pisanie logiki i skończyło się z:

if((condition1 && !condition2) || (condition2 && !condition1)) 
{ 
} 

mógłbym przepisać go jako :

if(condition1^condition2) 
{ 
} 

powiedział, zabrałbym go na każdym indywidualnym bazowej i zważyć korzyści zwięzłości vs. potencjalnego zaciemniania powodu względnej ciemności.

0

Jego wyjątkowy operator OR (XOR), o którym wspominali inni. Oto tabela prawdy dla XOR

P Q P^Q 
T T  F 
T F  T 
F T  T 
F F  F 

Należy pamiętać, że P^Q jest równe P! = Q. Czasami P! = Q jest używane w kodzie zamiast operatora XOR.

1
  • Jest to często stosowane jako sposób "flip bity" przy realizacji operacji XOR to 1 (flip) 0 (w celu zachowania). Zwykle jest to przydatne w szyfrowaniu/deszyfrowaniu/haszowaniu.** Jest to w rzeczywistości UŻYTECZNE **

przykład:

101^ 
110 
----- 
011 //Flip the first 2, keep the 3rd 
  • może być również wykorzystywane do zamiana sposób (choć przy użyciu standardowego sposób i rodzajowych jest prawdopodobnie bardziej idealny) :

przykład:

int myMoney = 10; 
int yourMoney = 50; 
Swap(myMoney, yourMoney) 

public void Swap(ref int a, ref int b) //No 'temp' variable necessary 
{ 
    a ^= b; 
    b ^= a; 
    a ^= b; 
} 
  • Jest używany w arytmetyce binarnej. ** To jest rzeczywiście UŻYTECZNE **

  • Klapki bool (choć wolałbym użyć bool x = true; x = x;

Przykład:

public bool flip(ref bool b) 
{ 
    b ^= true; 
} 
Powiązane problemy