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.
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.
Dans les comparaisons "normales", il est donné au type non signé:
voidOnStart()
{
ulong i=0;
while(true)
{
if(i<ULONG_MAX) {i++;} //тут в условии так и остаётся тип ulong, преобразования к long не происходитelse {break;}
}
}
Lestypes uint et ulong ont une priorité plus élevée que int et long :
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
ULONG_MAX n'a pas de type en soi, comparé à int il sera int, comparé à long il sera long.
Et par rapport à ulong ?
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 ?
Cela peut-il être l'inverse ?
int et long par rapport à ulong serait ulong ?
Les cycles semblent se convertir en un type signé :
Et aucune itération n'est effectuée.
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.
Dans les comparaisons "normales", il est donné au type non signé: