Was bedeutet in der C-Sprache “return ~0”?

Lesezeit: 3 Minuten

Ich beschäftige mich mit C-Code, der enthält

return ~0;

Was bedeutet das? Googeln ist so gut wie unmöglich…

  • jemand, der klug ist. Es ist dasselbe wie -1.

    – Byron Whitlock

    14. September 2010 um 6:58 Uhr

  • In solchen Fällen müssen Sie sich alternative Abfragen wie „C-Operatoren“ oder „C-Tilde-Operator“ überlegen.

    – Paul Dixon

    14. September 2010 um 6:59 Uhr

  • @Byron Whitlock: … auf einer Zweierkomplementmaschine. Es ist negativ Null (-0) auf einer Einerkomplementmaschine, und es ist INT_MIN auf einer vorzeichenbehafteten Magnitudenmaschine.

    – AnT – Stoppt die UkroNazis

    14. September 2010 um 7:07 Uhr


  • Komisch, dass das Wort „clever“ beim Programmieren meistens „dumm“ bedeutet. Ich würde einen konstanten Ausdruck, der auf verschiedenen CPU-Architekturen unterschiedliche Dinge bedeutet, überhaupt nicht als “clever” ansehen.

    – Christian Heuter

    14. September 2010 um 7:21 Uhr

  • @R.: Ich finde eine solche Qualifikation etwas unhöflich und nicht an ihrem Platz auf SO. Jemand mag an bestimmten Stellen unwissend sein, ohne zu sein und zu sein idiot.

    – Jens Gustedt

    14. September 2010 um 14:14 Uhr

~ ist ein bitweises Not/Complement, alias es ändert alle Nullen in Einsen und umgekehrt. ~0 ist ein Wert, bei dem alle Bits auf 1 gesetzt sind.

Der Schlüssel zur Beantwortung dieser Art von Fragen beim Untersuchen des Codes besteht darin, die Struktur der Sprache ausreichend zu erkennen, um zu wissen, welche Frage gestellt werden muss. Zum Beispiel die return -Anweisung erfordert einen Ausdruck eines Typs, der mit dem deklarierten Rückgabetyp für die Funktion selbst kompatibel ist.

Wissend, dass ~0 muss ein Ausdruck sein, es ist entweder eine wirklich lustige Art, eine Zahl zu schreiben, oder es ist ein Operator, den Sie nicht erkennen, wenn er auf die Konstante Null angewendet wird. Diese letztere Hypothese lässt sich leicht überprüfen, und das Googeln nach “C-Sprachoperator” führt schnell dazu Dutzende von Tabellen von Operatoren. Fast jeder davon wird Ihnen sagen, dass die ~ operator ist ein bitweiser, nicht unärer Operator, der jedes einzelne Bit seines Operanden invertiert. In diesem speziellen Fall konvertiert das die vorzeichenbehaftete Ganzzahl 0 auf die ganze Zahl, die mit allen gesetzten Bits dargestellt wird.

Auf den meisten Plattformen, denen Sie begegnen werden, hat diese Ganzzahl den Wert -1.

unnamed file 41
codaddict

Das ~ (Tilde)-Operator führt ein bitweises Komplement an seinem einzelnen ganzzahligen Operanden durch.

Eine Zahl zu ergänzen bedeutet, alle zu ändern 0 bisschen zu 1 und alle 1s zu 0s

  • ~ ist das bitweise NICHT, wie @ user446034 in seiner Antwort betonte. Das Einerkomplement ist ein Darstellungsschema für Zahlen im Binärformat, das diesen Operator verwendet.

    – Björn Pollex

    14. September 2010 um 7:03 Uhr

Wie auch immer, für Suchanfragen mit Sonderzeichen wie Ihrem “return ~0;” Sie können verwenden
http://symbolhound.com/

Es ist ziemlich nützlich für Programmierer.

unnamed file 42
AnT – Stoppt die UkroNazis

Hier gibt es zwei unabhängige Teile: return und ~0.

return ist eine Return-Anweisung. Lesen Sie darüber in Ihrem Lieblings-C-Buch.

~0 ist ein Ausdruck, der aus einem bitweisen Komplementoperator besteht ~ angewendet auf ganzzahlige Konstante 0. Alle Bits in einem Nullwert vom Typ int werden invertiert (werden 1) und die resultierende int Wert (mit allen Bits auf 1 gesetzt) ​​ist, was die ~0 Ausdruck wird ausgewertet. Auf einer Zweierkomplementmaschine ein vorzeichenbehafteter ganzzahliger Wert mit einem solchen Bitmuster (111...1) darstellen würde -1.

  • @osager: „Auf einer Zweierkomplementmaschine ein vorzeichenbehafteter ganzzahliger Wert“. Einige Programmierer möchten in manchen Situationen sicherstellen, dass ihr Code in Anwendungsfällen darüber hinaus funktioniert.

    – Slipp D. Thompson

    17. April 2015 um 4:03 Uhr

unnamed file 43
Lukas Rahne

Nicht null oder wahr.

  • @osager: „Auf einer Zweierkomplementmaschine ein vorzeichenbehafteter ganzzahliger Wert“. Einige Programmierer möchten in manchen Situationen sicherstellen, dass ihr Code in Anwendungsfällen darüber hinaus funktioniert.

    – Slipp D. Thompson

    17. April 2015 um 4:03 Uhr

unnamed file 9
Zotteliger Frosch

Die Tilde macht ein bitweises Kompliment der Zahl 0, die einen Wert zurückgibt, bei dem alle Bits auf 1 gesetzt sind, unabhängig von der Größe des Rückgabewerts (Sie erhalten also 0xFF für ein Zeichen usw.).

  • Das ist C. Wenn Sie sich bewerben ~x wo x Typ hat charSie erhalten dasselbe wie ~(int)x aufgrund von Standardaktionen, nicht 0xff.

    – R.. GitHub HÖR AUF, EIS ZU HELFEN

    14. September 2010 um 12:41 Uhr

  • @R .. Das ist mir auch aufgefallen, und jetzt stecke ich bei einer positiven Bewertung fest

    – Matt Tischler

    14. September 2010 um 23:45 Uhr

1019710cookie-checkWas bedeutet in der C-Sprache “return ~0”?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy