2011-03-04 7 views
11

Possible en double:
What are the | and^operators used for?En C#, que fait le personnage ^?

En C# qu'est-ce que le caractère^faire?

+0

http://stackoverflow.com/q/3735623 – Alex

+5

Une utilisation supplémentaire de "^" en C#, ou dont au moins apparaît dans toute la documentation .NET sans aucune explication, est la « poignée à l'opérateur de l'objet. " Ceci est une chose C++ qui marque un objet pour la collecte des ordures de sorte que vous n'avez pas à vous soucier de la mémoire vous-même. C'est sur tous les documents MSDN .NET par exemple. 'SomeMethod (Chaîne ^, IDictionary ^)', mais n'est explicite nulle part. La seule chose qui apparaît dans Google ou SE en ce qui concerne "^" en C# est cette réponse de "XOR", ce qui est complètement différent. https://msdn.microsoft.com/en-us/library/yk97tc08.aspx – mc01

+0

C'est la réponse que je cherchais. –

Répondre

14

Cet opérateur est binaire XOR.

Les opérateurs binaires^sont prédéfinis pour les types et les entiers. Pour types intégrales,^calcule le bit exclusif de ses opérandes. Pour les opérandes bool ,^calcule le logique exclusif ou de ses opérandes; c'est-à-dire, le résultat est vrai si et seulement si exactement un de ses opérandes est vrai.

4

Le caractère^charater ou 'caret' est un opeartor XOR bit à bit. par exemple.

using System; 

class Program 
{ 
    static void Main() 
    { 
     // Demonstrate XOR for two integers. 
     int a = 5550^800; 
     Console.WriteLine(GetIntBinaryString(5550)); 
     Console.WriteLine(GetIntBinaryString(800)); 
     Console.WriteLine(GetIntBinaryString(a)); 
     Console.WriteLine(); 

     // Repeat. 
     int b = 100^33; 
     Console.WriteLine(GetIntBinaryString(100)); 
     Console.WriteLine(GetIntBinaryString(33)); 
     Console.WriteLine(GetIntBinaryString(b)); 
    } 

    /// <summary> 
    /// Returns binary representation string. 
    /// </summary> 
    static string GetIntBinaryString(int n) 
    { 
     char[] b = new char[32]; 
     int pos = 31; 
     int i = 0; 

     while (i < 32) 
     { 
      if ((n & (1 << i)) != 0) 
      { 
       b[pos] = '1'; 
      } 
      else 
      { 
       b[pos] = '0'; 
      } 
      pos--; 
      i++; 
     } 
     return new string(b); 
    } 
} 

^^^ Output of the program ^^^ 

00000000000000000001010110101110 
00000000000000000000001100100000 
00000000000000000001011010001110 

00000000000000000000000001100100 
00000000000000000000000000100001 
00000000000000000000000001000101 

http://www.dotnetperls.com/xor