Erros, bugs, perguntas - página 1127

 
Fleder:

O que faz este rearranjo? t foi inferior ao ULONG_MAX-1 e permanece o mesmo.

Citei este exemplo errado - foi uma comparação com int, enquanto aqui está com longo

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

Ostipos uint e ulong têm uma prioridade mais alta do que int e longo:

Transformações em caso de fusão por operação binária

Seria lógico utilizar a conversão para um tipo mais elevado nas expressões comparadas.

Mas isto não parece aplicar-se às expressões de laço que estão a ser verificadas.

 
ULONG_MAX não tem tipo per se, em comparação com int será int, em comparação com longo será longo
 
A100:
ULONG_MAX não tem nenhum tipo em si
Que tipo tem este número:18446744073709551615?
 
A100:
ULONG_MAX não tem tipo per se, em comparação com int será int, em comparação com longo será longo

E em comparação com ulong?

void OnStart()
{
  ulong n=18446744073709551615;
  Print(ULONG_MAX==n);   //true
}
 
A100:
ULONG_MAX não tem tipo per se, em comparação com int será int, em comparação com longo será longo

Pode ser o contrário?

int e longo versus ulong será ulong?

 
Fleder:

Pode ser o contrário?

int e longo versus ulong seria ulong?

Ao comparar assinados e não assinados, é dado um aviso, a menos que um seja explicitamente convertido para o outro, será provavelmente uma comparação um pouco mais ampla
 

Os ciclos parecem estar a converter-se a um tipo assinado:

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

E não é feita qualquer iteração.

 
A100:
Ao comparar assinados e não assinados, é emitido um aviso, a menos que um seja explicitamente convertido para o outro, haverá provavelmente uma comparação um pouco mais ampla
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 );
}
mas é assim que as coisas são.
Razão: