Erreurs, bugs, questions - page 1127

 

Lestypes uint et ulong ont une priorité plus élevée que int et long :

Transformations lors de la fusion par opération binaire

Il serait logique d'utiliser la conversion vers un type supérieur dans les expressions comparées.

Mais cela ne semble pas s'appliquer aux expressions de la boucle qui sont vérifiées.

 
ULONG_MAX n'a pas de type en soi, comparé à int il sera int, comparé à long il sera long.
 
A100:
ULONG_MAX n'a pas de type en soi
Quel est le type de ce numéro :18446744073709551615 ?
 
A100:
ULONG_MAX n'a pas de type en soi, comparé à int il sera int, comparé à long il sera long.

Et par rapport à ulong ?

void OnStart()
{
  ulong n=18446744073709551615;
  Print(ULONG_MAX==n);   //true
}
 
A100:
ULONG_MAX n'a pas de type en soi, comparé à int il sera int, comparé à long il sera long.

Cela peut-il être l'inverse ?

int et long versus ulong sera ulong ?

 
Fleder:

Cela peut-il être l'inverse ?

int et long par rapport à ulong serait ulong ?

Lors de la comparaison de signés et de non signés, un avertissement est donné, à moins que l'un ne soit explicitement converti en l'autre, il s'agira probablement d'une comparaison par bit.
 

Les cycles semblent se convertir en un type signé :

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

Et aucune itération n'est effectuée.

 
A100:
Lors de la comparaison de signés et de non signés, un avertissement est émis, à moins que l'un ne soit explicitement converti en l'autre, il y aura probablement une comparaison bit à bit.
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 );
}
mais c'est comme ça.
 

Dans les comparaisons "normales", il est donné au type non signé:

void OnStart()
{
  ulong i=0;
  while(true)
  {
    if(i<ULONG_MAX) {i++;}  //тут в условии так и остаётся тип ulong, преобразования к long не происходит
    else {break;}
  }
}