Vergleiche in C# [] (Vergleiche in C#), Lektion, Seite 723824
https://www.purl.org/stefan_ram/pub/vergleiche_csharp (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C#-Kurs

Vergleiche in C♯ 

In dieser Lektion wird der binäre Infixoperator »<« behandelt, mit dem eine Aussage geschrieben werden kann, die besagt, daß der Wert des ersten Operanden kleiner als der Wert des zweiten Operanden ist.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine( 1 < 2 ); }}
Protokoll
True

Vereinfachte Syntax

Syntaxdiagramm
Ausdruck
.----------. .-. .----------.
--->| Ausdruck |--->· < ·-->| Ausdruck |--->
'----------' '-' '----------'

Mathematische Schreibweise

Die mathematische Schreibweise dieses Operators ist ebenfalls ‹<›.

Aussprache

Der Operator wird „kleiner“, „kleiner als“ oder „ist kleiner als“ gesprochen.

Man kann »2<x« aber auch umgekehrt als „x ist größer als 2.“ aussprechen.

Priorität

Die folgende Tabelle gibt die Assoziativität und Priorität der bisher behandelten Operatoren wieder.

Eigenschaften

S P A (S = Stelligkeit ("Aritaet"), P = Position, A = Assoziativitaet)

() 1 Z Eingeklammerter Ausdruck
+ - 1 P Unaere vorangestellte Operatoren (Vorzeichen)
* / 2 I L "Punktrechnung": Multiplikation, Division
+ - 2 I L "Strichrechnung": Addition, Subtraktion
< 2 I L Vergleich
== != 2 I L Gleichheitspruefung und Ungleichheitspruefung
= 2 I R Zuweisung

Die Priorität dieses Operators ist schwächer als die der Operatoren zur Berechnung eines Wertes aber stärker als die der Gleichheitsprüfungen und der Zuweisungen.

Wir illustrieren die Priorität dieses Operators durch Auflistung einiger Ausdrücke gleicher Bedeutung.

Priorität

Ausdruck Ausdruck mit gleicher Bedeutung

false == a < 2 false ==( a < 2 )
x = a < 2 x =( a < 2 )
2 + 3 < a * -4 ( 2 + 3 )<( a * -4 )

Typanforderungen (vereinfacht)

Bei den Operanden dieses Operators muß es sich um numerische Typen  handeln. Bei einer Kombination von »int« und »double« wird der int -Wert vor dem Vergleich nach double  gewandelt.

Mögliche Gleichheitsprüfungen (symbolische Schreibweise)

int < int

int < double (als double < double)

double < int (als double < double)

double < double (als double < double)

Typ des Ausdrucks

Der Typ eines mit diesem Operator gebildeten Ausdrucks zum Vergleich ist immer »bool«.

Semantik (Wert)

Bei der Auswertung dieses Operators werden zunächst beide Operanden ausgewertet.

Der Wert ist »true« genau dann wenn der Wert des linken Operanden kleiner ist als der Wert des rechten Operanden.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine( 1 < 2 );
global::System.Console.WriteLine( 0.0 < 0.00 );
global::System.Console.WriteLine( 1.9999999999999999 < 2.0 ); }}
Protokoll
True
False
False

Beispiele

Der Wert eines Aufrufs von »global::Microsoft.JScript.MathObject.random()« darf nicht negativ sein.

Das folgende Programm setzt den Wert der Variablen »zuKlein« auf »true«, falls doch einmal gegen diese Regel verstoßen werden sollte. Wir erwarten aber keinen Verstoß gegen diese Regel und somit die Ausgabe des Wertes »false«.

Program.cs
public static class Program
{ public static void Main()
{ double zufallszahl = global::Microsoft.JScript.MathObject.random();
bool zuKlein = zufallszahl < 0;
global::System.Console.WriteLine( zuKlein ); }}
Protokoll
False

Das folgende Programm erledigt die Prüfung mit einer Methode.

Protokoll
false
Program.cs

public static class Program
{

public static bool zuKlein( double x )
{ return x < 0; }

public static void Main()
{ double zufallszahl = global::Microsoft.JScript.MathObject.random();
global::System.Console.WriteLine( zuKlein( zufallszahl )); }}

Protokoll
False

Der Wert eines Aufrufs von »global::Microsoft.JScript.MathObject.random()« darf nicht 1 oder mehr sein.

Das folgende Programm setzt den Wert der Variablen »zuGross« auf »true«, falls doch einmal gegen diese Regel verstoßen werden sollte. Wir erwarten aber keinen Verstoß gegen diese Regel und somit die Ausgabe des Wertes »false«.

Program.cs
public static class Program
{ public static void Main()
{ double zufallszahl = global::Microsoft.JScript.MathObject.random();
bool zuGross = zufallszahl < 1 == false;
global::System.Console.WriteLine( zuGross ); }}
Protokoll
False

Das folgende Programm setzt den Wert der final-Variablen »schlecht« auf »true«, falls sich eine Zufallszahl außerhalb des erlaubten Bereich befindet. Wir erwarten also »False«.

Program.cs

public static class Program
{ public static void Main()
{

double zufallszahl = global::Microsoft.JScript.MathObject.random();
bool zuKlein = zufallszahl < 0;
bool zuGross = zufallszahl < 1 == false;
bool schlecht = zuKlein != zuGross;

global::System.Console.WriteLine( schlecht ); }}

Protokoll
False

Man beachte, wie die sprechenden Variablennamen das Verständnis des Programms erleichtern.

Übungsfragen

?   Übungsfrage

Welche Ausgabe erzeugt das folgende Programm?

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine( 2 < 3 ); }}

?   Übungsfrage

Welche Ausgabe erzeugt das folgende Programm?

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine( 3 < 3 ); }}

?   Übungsfrage

Welche Ausgabe erzeugt das folgende Programm?

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine( 2 + 1 < 3 ); }}

Unendlich und die Unzahl *

Unendlich gilt als größer als jeder andere double-Wert (außer die Unzahl “not a number ”) und minus Unendlich gilt als kleiner als jeder andere double-Wert (außer die Unzahl “not a number ”).

Vergleich mit der Unzahl “not a number ” ergeben stets »false«.

Program.cs

public static class Program
{ public static void Main()
{

double infinity = 1.0 / 0.0;
double notANumber = 0.0 / 0.0;
double maximum = 1.7976931348623157E+308;

global::System.Console.WriteLine( "{0:R}", infinity ); /* Infinity */
global::System.Console.WriteLine( "{0:R}", notANumber ); /* NaN */
global::System.Console.WriteLine( "{0:R}", maximum ); /* 1.7976931348623157E308 */

global::System.Console.WriteLine( maximum < infinity ); /* true */
global::System.Console.WriteLine( -infinity < infinity ); /* true */

global::System.Console.WriteLine( maximum < maximum + 1 ); /* false */
global::System.Console.WriteLine( infinity < infinity + 1 ); /* false */
global::System.Console.WriteLine( notANumber < infinity ); /* false */
global::System.Console.WriteLine( notANumber == infinity ); /* false */
global::System.Console.WriteLine( infinity == notANumber ); /* false */
global::System.Console.WriteLine( infinity < notANumber ); /* false */
global::System.Console.WriteLine( notANumber < notANumber ); /* false */ }}

Protokoll
Infinity
NaN
1.7976931348623157E+308
True
True
False
False
False
False
False
False
False

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723824 stefan_ram:723824 Vergleiche in C# Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723824, slrprddef723824, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/vergleiche_csharp