Правила продвижения для знаковых и беззнаковых бинарных операторов
Рассмотрите следующие фрагменты кода:
// Snippet 1 int max = std::numeric_limits::max(); unsigned int one = 1; unsigned int result = max one;
// Snippet 2 unsigned int us = 42; int neg = -43; int result = us neg;
Как оператор " " определяет правильный тип результата в этих случаях, учитывая разную знаковость операндов?
Оператор выполняет "обычные арифметические преобразования" правило, которое определяет шаги преобразования типов на основе типов операндов. Согласно этому правилу, если любой из операндов имеет вид:
Since int и unsigned int взаимозаменяемы в правиле, в качестве результата выбирается операнд более широкого типа (unsigned int) type.
Это объясняет, почему в фрагменте 1 результатом является unsigned int (2147483648), а во фрагменте 2 — int (-1). Знаковый операнд (отрицательный) неявно преобразуется в беззнаковое целое число, что в последнем случае приводит к неопределенному значению.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3