Zeph (./2436) :
justement c'est un bon indicateur, si tu fais des opérations sur des tailles tu ne devrais jamais sortir de l'espace des nombres non signés, sinon je suis d'accord que c'est bancal.
Sauf que, contrairement au nombres signés, c'est un espace qui pu un peu beaucoup, où la soustraction est très problématique, donc par exemple on ne peut pas résoudre systématiquement dans l'espace une équation de premier degré ( 5x+142=0), etc. Bref même pas un corps.
Du coup la sureté des opérations instables (soustraction) dépend non pas du type, mais de la valeur des variables : (a-b) appartient à |N ssi a>=b, ce qu'il est impossible de savoir à la compilation. Du coup :
-soit on accepte la soustraction, et on a un type qui suxe totalement, instable
-soit on refuse la soustraction.
-soit on accepte la soustraction en castant vers les entiers relatifs (au moins dans certains cas), c'est mathématiquement bien pus logique mais ça casse presque tout l'intérêt d'utiliser des nombres non signés.
-soit on fait une soustraction complétement dégueu (où a-b = 0 si a<= b ), et bonjour les emmerdes.
Du coup si ça avait un sens informatique évident quand on était au bit près, ou assez bas niveau (pointeurs), c'est logiquement et mathématiquement plutôt naze, les nombres non signés, sauf vraiment pour faire de l’arithmétique spécifique performante (sur les nombres premiers, la crypto, etc, etc). C'est pour ça que les langages fonctionnels n'ont généralement pas de type unsigned de base. Ils apportent beaucoup plus de problèmes que d'avantages.
Exemple : ça doit se trouver mais on va commencer bateau. On dispose d'un espace de X Mo pour écrie un fichier, on veux savoir si il y assez de place... ( x - taille fichier ) > 0 ? Bha non tu peux pas le faire sans erreur. Bha ( x > taille fichier ) ? ça revient à faire la chose précédente mais on compte sur le compilo, processeur, etc, pour te sortir de la merde et hacker la difficulté. Si on veut rester cohérent et type-propre, il faudrait donc une fonction d'ordre spécifique, ça existe sur les entiers naturels, mais bon c'est relou à implémenter sans faire appel aux entiers relatifs.
Je ne parle pas du jour où, muni de la soustraction dégueu, tu veux faire (a-b)+c et que tu te rends compte que (a-b)+c != c+a-b, que tu casses ton ordi et changes de métier.