Maison >développement back-end >C++ >Existe-t-il un moyen plus rapide de vérifier si un entier se situe dans une plage donnée ?
Le moyen le plus rapide de déterminer si un entier est compris entre deux entiers (inclus)
Déterminer si un entier se situe entre deux autres entiers est une pratique courante opération, et l'approche traditionnelle implique l'utilisation du ET logique et de l'inégalité comparaisons :
x >= start && x <= end
Cependant, existe-t-il une alternative plus rapide ?
Une optimisation potentielle consiste à utiliser une seule comparaison/branche. Cette approche fonctionne en convertissant le nombre et les limites inférieure et supérieure en entiers non signés et en comparant leur différence :
if ((unsigned)(number-lower) <= (upper-lower)) in_range(number);
Pourquoi cela fonctionne-t-il ? Si le nombre est inférieur à la limite inférieure, la différence sera négative. Si le nombre est compris dans la plage, la différence sera positive et inférieure ou égale à la différence entre les bornes supérieure et inférieure.
Cette méthode présente plusieurs avantages :
En pratique, traduire le nombre et l'intervalle au point d'origine et tester si le nombre se situe entre [0, D], où D = supérieur - inférieur, constitue la base de cet algorithme efficace. Les nombres négatifs en dessous de la limite inférieure se traduisent par des valeurs négatives, tandis que les nombres au-dessus de la limite supérieure se traduisent par des valeurs supérieures à D.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!