Announcement

Collapse
No announcement yet.

Bit Operationen (&, |, ^) gehen nicht mit byte und short

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bit Operationen (&, |, ^) gehen nicht mit byte und short

    Hi,
    Musste mit Bestürzung feststellen, dass die Bitoperationen in Visual Studio C# nicht auf die Typen byte und short anwendbar sind. Was soll denn das?
    byte x = 10;
    byte y = 12;
    byte z = x^y; // geht nicht!!
    byte z = (byte)((int)x ^ (int)y); // ^ mag nur int's
    textBox1.Text = z.ToString();
    Pat

  • #2
    Hallo,
    in der <i>C# Language Specification</i> (7.10.1 Integer logical operators) sind die folgenden vordefinierten Operatoren aufgeführt:
    <code>
    int operator &(int x, int y);
    uint operator &(uint x, uint y);
    long operator &(long x, long y);
    ulong operator &(ulong x, ulong y);
    int operator |(int x, int y);
    uint operator |(uint x, uint y);
    long operator |(long x, long y);
    ulong operator |(ulong x, ulong y);
    int operator ^(int x, int y);
    uint operator ^(uint x, uint y);
    long operator ^(long x, long y);
    ulong operator ^(ulong x, ulong y);
    </code&gt

    Comment


    • #3
      Hallo Herr Kosch,
      Gibts denn einen Grund, dass die Operatoren für Byte und Short nicht zur Verfügung stehen? Oder wurde das einfach vergessen?
      Pa

      Comment


      • #4
        Da Prozessoren intern mit 32 Bit rechnen, gehe ich nicht davon aus, dass es vergessen wurde. Vielmehr wird nur das angeboten, was sinnvoll ist. Bei Byte und Short würde vermutlich auch mit vollen 32Bit gerechnet werden müssen.<p>
        Mari
        Schöne Grüße, Mario

        Comment


        • #5
          Hm, mir ist eigentlich egal, womit der Prozessor rechnet.
          Wennich einen anderen Variablentyp als den Prozessorgrundtyp brauche, dann nehme ich doch an, dass hier auch die grundlegenden Rechenoperationen funktionieren. Darunter verstehe ich auch die Bitoperationen.
          Es gibt (m.E.) keinen Grund, dass das nicht mit byte und short gehen soll.
          Solche Einschränkungen sind doch nur lästig und irritierend!
          Pa

          Comment


          • #6
            Die bitweisen Operationen wurde ja nicht dem menschlichen Denken nachempfunden, sondern sind nun einmal Maschinennah ausgelegt. Ich finde die Zeile<p>
            (byte)((int)x ^ (int)y);<p>
            durchaus konsequent. So zeigst Du Dir selbst, wie die Maschine es intern umsetzen kann.<p>
            Mari
            Schöne Grüße, Mario

            Comment


            • #7
              Hallo Mario,
              Also ich sehe einen Operator eher typbezogen und nicht maschinenbezogen. Sonst müsste man bei einem arithmetisch UND (+) etc. konsequenterweise ja auch zuerst zum Lieblingstyp des Prozessors (hier 32bit) casten.
              Ist jedenfalls fein, dass jemand hier mit mir diskutiert :-)
              Gruss Pa

              Comment


              • #8
                Jep, aus der Sichtweise hast Du Recht !<p>
                Mari
                Schöne Grüße, Mario

                Comment


                • #9
                  Hallo,
                  &gt;Gibts denn einen Grund....
                  der Operator ^ wurde nur bei den in der Spezifikation genannten Klassen als Methode implementiert. Allerdings sagt die Spezifikation auch, dass man diesen Operator für andere Klassen auch selbst nachrüsten kann. Jetzt ist nur die Frage, welcher Weg (Typumwandlung oder Operator-Methode) den geringsten Aufwand mit sich bringt ;-

                  Comment

                  Working...
                  X