Errores, fallos, preguntas - página 1127

 
Fleder:

¿Qué hace este reordenamiento? t era menor que ULONG_MAX-1 y sigue siendo el mismo.

He citado este ejemplo equivocado - era una comparación con int, mientras que aquí es con long

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

Lostipos uint y ulong tienen mayor prioridad que int y long:

Transformaciones al fusionar por operación binaria

Lo lógico sería utilizar la conversión a un tipo superior en las expresiones comparadas.

Pero esto no parece aplicarse a las expresiones de bucle que se comprueban.

 
ULONG_MAX no tiene un tipo en sí, comparado con int será int, comparado con long será long
 
A100:
ULONG_MAX no tiene un tipo propio
¿Qué tipo tiene este número:18446744073709551615?
 
A100:
ULONG_MAX no tiene un tipo en sí, comparado con int será int, comparado con long será long

¿Y comparado con Ulong?

void OnStart()
{
  ulong n=18446744073709551615;
  Print(ULONG_MAX==n);   //true
}
 
A100:
ULONG_MAX no tiene un tipo en sí, comparado con int será int, comparado con long será long

¿Puede ser al revés?

¿Int y long frente a ulong sería ulong?

 
Fleder:

¿Puede ser al revés?

int y long frente a ulong sería ulong?

Al comparar con signo y sin signo, se da una advertencia, a menos que uno se convierta explícitamente en el otro, probablemente será una comparación a nivel de bits
 

Parece que los ciclos se convierten en un tipo con signo:

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

Y no se realiza ninguna iteración.

 
A100:
Al comparar con signo y sin signo, se emite una advertencia, a menos que uno se convierta explícitamente en el otro, probablemente habrá una comparación a nivel de bits
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 );
}
pero así es.