Il n'y a aucune raison de préférer signed
plus unsigned
Certains pensent que les programmeurs moyens ne sont pas assez compétents et/ou attentifs pour écrire un code correct en termes de unsigned
types. C'est souvent le principal raisonnement utilisé par les différents "intervenants", quel que soit leur degré de respect.
En réalité, les programmeurs compétents développent et/ou apprennent rapidement l'ensemble des idiomes et des compétences de base en matière de programmation qui leur permettent d'écrire un code correct en termes de types intégraux non signés.
Notez également que les différences fondamentales entre la sémantique signée et non signée sont toujours présentes (sous une forme superficiellement différente) dans d'autres parties du langage C et C++, comme l'arithmétique des pointeurs et l'arithmétique des itérateurs. Ce qui signifie que dans le cas général, le programmeur n'a pas vraiment la possibilité d'éviter de traiter les questions spécifiques à la sémantique non signée et les "problèmes" qui en découlent. En d'autres termes, que vous le vouliez ou non, vous devez apprendre à travailler avec des plages qui se terminent brusquement à leur extrémité gauche et qui se terminent ici (et non quelque part au loin), même si vous évitez catégoriquement d'utiliser des chaînes de caractères non signées. unsigned
entiers.
De plus, comme vous le savez probablement, de nombreuses parties de la bibliothèque standard s'appuient déjà sur les éléments suivants unsigned
les types de nombres entiers. Forcer l'arithmétique signée dans le mélange, au lieu d'apprendre à travailler avec l'arithmétique non signée, n'aboutira qu'à un code désastreusement mauvais.
La seule réel raison de préférer signed
dans certains contextes, ce qui me vient à l'esprit, c'est que dans un code mixte entier/floating-point signed
Les formats entiers sont généralement directement pris en charge par le jeu d'instructions FPU, tandis que les formats entiers sont directement pris en charge par le jeu d'instructions FPU. unsigned
ne sont pas du tout pris en charge, ce qui oblige le compilateur à générer du code supplémentaire pour les conversions entre les valeurs à virgule flottante et les formats unsigned
valeurs. Dans un tel code signed
pourraient être plus performants.
Mais en même temps, dans un code purement entier unsigned
peuvent être plus performants que les types signed
types. Par exemple, la division des nombres entiers nécessite souvent un code correctif supplémentaire afin de satisfaire aux exigences de la spécification du langage. La correction n'est nécessaire que dans le cas d'opérandes négatifs, ce qui gaspille des cycles de l'unité centrale dans des situations où les opérandes négatifs ne sont pas vraiment utilisés.
Dans ma pratique, je m'attache à unsigned
chaque fois que je le peux, et j'utilise signed
seulement si je dois vraiment le faire.