Fehler, Irrtümer, Fragen - Seite 1127

 
Fleder:

Was bewirkt diese Umstellung? t war kleiner als ULONG_MAX-1 und bleibt gleich.

Ich zitierte dieses falsche Beispiel - es war ein Vergleich mit int, während es hier mit long ist

for(int t=0
void OnStart()
{
  long t=0;
 

DieTypen uint und ulong haben eine höhere Priorität als int und long:

Transformationen beim Zusammenführen durch binäre Operation

Es wäre logisch, die Umwandlung in einen höheren Typ in den verglichenen Ausdrücken zu verwenden.

Dies scheint jedoch nicht für die zu prüfenden Schleifenausdrücke zu gelten.

 
ULONG_MAX hat an sich keinen Typ, im Vergleich zu int ist es int, im Vergleich zu long ist es long
 
A100:
ULONG_MAX hat an sich keinen Typ
Welchen Typ hat diese Nummer:18446744073709551615?
 
A100:
ULONG_MAX hat an sich keinen Typ, im Vergleich zu int ist es int, im Vergleich zu long ist es long

Und im Vergleich zu ulong?

void OnStart()
{
  ulong n=18446744073709551615;
  Print(ULONG_MAX==n);   //true
}
 
A100:
ULONG_MAX hat an sich keinen Typ, im Vergleich zu int ist es int, im Vergleich zu long ist es long

Kann es auch andersherum sein?

Int und long gegenüber ulong wäre ulong?

 
Fleder:

Kann es auch andersherum sein?

int und long gegenüber ulong wäre ulong?

Beim Vergleich von vorzeichenbehaftet und vorzeichenlos wird eine Warnung ausgegeben, es sei denn, einer der beiden Werte wird explizit in den anderen umgewandelt, dann wird es wahrscheinlich ein bitweiser Vergleich sein
 

Die Zyklen scheinen sich in einen vorzeichenbehafteten Typ umzuwandeln:

void OnStart()
{
  ulong n=0;
  for(ulong i=0;i<ULONG_MAX;i++) {n++;}
  Print("n = ",n);          //0
  Print((long)ULONG_MAX);   //-1
}

Und es wird keine Iteration durchgeführt.

 
A100:
Beim Vergleich von vorzeichenbehaftet und vorzeichenlos wird eine Warnung ausgegeben, es sei denn, einer der beiden Werte wird explizit in den anderen umgewandelt, dann wird es wahrscheinlich einen bitweisen Vergleich geben
void OnStart()
{
  long l=13;
  ulong u=13;
  bool compare=(l==u);           //предупреждения нет
  Print("compare = ",compare);   //compare = true
}

 
bool f( int i, uint j )
{
        return ( i < j );
}
aber so ist es nun mal.
Grund der Beschwerde: