Description :
Sur les cartes Uno et les autres cartes basées sur ATMEGA, les entiers non signés (entiers non signés) sont les mêmes que les entiers dans la mesure où ils stockent une valeur de 2 octets. Au lieu de stocker des nombres négatifs, ils ne stockent cependant que des valeurs positives, ce qui donne une plage utile de 0 à 65 535 ((2^16) – 1).
Le Due stocke une valeur de 4 octets (32 bits), allant de 0 à 4 294 967 295 (2^32 – 1).
La différence entre les entiers non signés et les entiers (signés) réside dans la manière dont le bit le plus élevé, parfois appelé bit de « signe », est interprété. Dans le type Arduino int (qui est signé), si le bit de poids fort est un « 1 », le nombre est interprété comme un nombre négatif et les 15 autres bits sont interprétés avec ( complément mathématique à 2 ).
Syntaxe :
unsigned int var = val;
Paramètres :
var
: Nom de variable.
val
: la valeur que vous attribuez à cette variable.
Exemple de code :
Remarques et avertissements :
Lorsque des variables non signées dépassent leur capacité maximale, elles « retournent » à 0, et inversement :
Les mathématiques avec des variables non signées peuvent produire des résultats inattendus, même si votre variable non signée n’est jamais renouvelée.
Le MCU applique les règles suivantes :
Le calcul est effectué dans le périmètre de la variable de destination. Par exemple, si la variable de destination est signée, elle fera des mathématiques signées, même si les deux variables d’entrée ne sont pas signées.
Cependant avec un calcul qui nécessite un résultat intermédiaire, la portée du résultat intermédiaire n’est pas précisée par le code. Dans ce cas, le MCU effectuera des calculs non signés pour le résultat intermédiaire, car les deux entrées ne sont pas signées !
Pourquoi utiliser des variables non signées ?
- Le comportement de retournement est souhaité, par exemple les compteurs
- La variable signée est un peu trop petite, mais vous voulez éviter la perte de mémoire et de vitesse de long/float.
Source : https://www.arduino.cc/reference/en/language/variables/data-types/unsignedint/