Вопросы по теме 'integer-promotion'

Yoda Условия и целочисленное продвижение
При сравнении типа, превышающего int , с целочисленной константой, следует ли размещать константу слева или справа, чтобы обеспечить правильное сравнение? int64_t i = some_val; if (i == -1) или должно быть: if (-1 == i) Существуют...
1446 просмотров
schedule 13.06.2022

Выполняет ли оператор Unary + преобразование типов?
До сих пор я считал, что унарный оператор + бесполезен. Но потом я наткнулся на следующий пример: char ch; short sh; int i; printf("%d %d %d",sizeof(ch),sizeof(sh),sizeof(i)); // output: 1 2 4 printf("%d %d...
2419 просмотров

Является ли унарный минус эквивалентным бинарному минусу?
Мой компилятор C выдавал предупреждение при использовании унарного минуса для значения unsigned , поэтому я исправил предупреждение, выполнив вместо этого вычитание из 0. Теперь мне интересно, эквивалентен ли текущий код исходному: uint32_t a,...
111 просмотров

Как переопределить правило интегрального продвижения для перечисления?
Это тесно связано с вопросом Являются ли перечисления C++ подписанными или неподписанными? . Согласно ответу JavaMan, enum не является ни signed , ни unsigned . Но он следует неотъемлемым правилам продвижения. Я работаю с библиотекой,...
439 просмотров
schedule 04.02.2024

C sprintf ломается с байтовыми параметрами (компилятор Keil)
У меня есть код, работающий в двух проектах / платформах. Он работает в одном, а не в другом. Код такой: uint8_t val = 1; uint8_t buff[16]; sprintf(buff, "%u", val); Ожидаемый результат - «1» (gcc), но в одном компиляторе (Keil) он...
677 просмотров
schedule 26.03.2022

продвижение короткого целого числа без знака в 32-битной системе
У меня есть 32-битный целочисленный размер если у меня есть арифметическое выражение вроде unsigned short current_time, last_time if((current_time - last_time) > timeout) Я считаю, что current_time и last_time будут преобразованы в...
449 просмотров
schedule 23.02.2023

Имеет ли перечислитель, используемый в выражении, тот же тип, что и базовый тип его перечисления?
Каков тип константы перечисления, когда она используется вне определения перечисления без области видимости? Рассмотрим следующий код: #include <iostream> enum modes { begin = 0, end = 1 }; int main() { std::cout <<...
129 просмотров

Является ли сдвиг знакового бита подписанным коротким неопределенным поведением в C?
Я слышал, что переход на бит целого числа со знаком, т.е. int test = INT_MAX; test = (test<<1) + 1; является неопределенным поведением из-за того, что test больше, чем INT_MAX. Но будет ли такое поведение встречаться в коротких...
133 просмотров

Почему существуют модификаторы длины hh и h в printf?
В функциях с переменным числом аргументов происходит повышение аргументов по умолчанию. 6.5.2.2.6 Если выражение, обозначающее вызываемую функцию, имеет тип, который не включает прототип, для каждого аргумента выполняется целочисленное повышение,...
98 просмотров