Я вполне уверен, что вычитание одного uint8_t
из другого должно привести к другому знаку без знака, но некоторые из моих результатов меня смущают.Есть ли разница между унарными и n -
uint8_t a = 2;
uint8_t b = 1;
uint8_t c = -a;
long d = b - a;
long e = b + c;
Когда я получить значение d
она производит -1
, а e
как я ожидал бы 255
. Это ошибка с версией gcc
Я использую ..... правильно?
Для справки Я использую компилятор arm-none-eabi-g++
для своих MSP-432
.
Глядя на this, кажется, указывает, что gcc
просто похоже на ошибку.
Глядя на this Вопрос о том, что крест-болт и рука gcc ошибаются.
Что здесь происходит?
используется спецификатор преобразования
b
«с, пожалуйста? –В C вы не можете работать с типами, меньшими, чем 'int'. Поиск неявных преобразований. – Olaf
Целочисленные акции как часть арифметических преобразований. Результатом является то, что вы не можете использовать псевдонимы типоразмера для модульной арифметики! Алиасы типа не кодируют ранг конверсии. –