Je suis assez certain que soustraire un uint8_t
d'un autre devrait aboutir à un autre nombre non signé, mais certains de mes résultats me confondent.Y at-il une différence entre unaire et n -
uint8_t a = 2;
uint8_t b = 1;
uint8_t c = -a;
long d = b - a;
long e = b + c;
Quand j'obtenir la valeur de d
il produit -1
, alors que e
est que je me attends 255
. Ceci est un bug avec la version de gcc
J'utilise ..... non?
Pour référence, j'utilise le compilateur arm-none-eabi-g++
pour mon MSP-432
. Regardant this semble indiquer que gcc
semble juste faire la même erreur ici.
En regardant this SO question, il semble que godbolt et le bras gcc est faux.
Que se passe-t-il ici?
spécificateur de conversion utilisé, s'il vous plaît? –
En C, vous ne pouvez pas utiliser des types plus petits que 'int'. Rechercher des conversions implicites – Olaf
Promotions d'entier dans le cadre de conversions arithmétiques. Le résultat est que vous ne pouvez pas utiliser les alias de type taille dans le but de l'arithmétique modulaire! Les alias de type n'encodent pas le rang de conversion. –