«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как обычные арифметические преобразования определяют тип результата двоичных операторов «+» со знаковыми и беззнаковыми операндами?

Как обычные арифметические преобразования определяют тип результата двоичных операторов «+» со знаковыми и беззнаковыми операндами?

Опубликовано 22 декабря 2024 г.
Просматривать:376

How Do Usual Arithmetic Conversions Determine the Result Type of Binary \

Правила продвижения для знаковых и беззнаковых бинарных операторов

Рассмотрите следующие фрагменты кода:

// 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;

Как оператор " " определяет правильный тип результата в этих случаях, учитывая разную знаковость операндов?

Оператор выполняет "обычные арифметические преобразования" правило, которое определяет шаги преобразования типов на основе типов операндов. Согласно этому правилу, если любой из операндов имеет вид:

  • long double, оба операнда преобразуются в long double.
  • double, оба операнда преобразуются в double.
  • float, оба операнда преобразуются в число с плавающей запятой.
  • unsigned long, другой операнд преобразуется в беззнаковый long.
  • long int и другой операнд unsigned int, оба операнда преобразуются в unsigned long int, если значение unsigned int может быть представлено в long int; в противном случае оба преобразуются в длинный.
  • long, другой операнд преобразуется в длинный.
  • unsigned, другой операнд преобразуется в беззнаковый.

Since int и unsigned int взаимозаменяемы в правиле, в качестве результата выбирается операнд более широкого типа (unsigned int) type.

Это объясняет, почему в фрагменте 1 результатом является unsigned int (2147483648), а во фрагменте 2 — int (-1). Знаковый операнд (отрицательный) неявно преобразуется в беззнаковое целое число, что в последнем случае приводит к неопределенному значению.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3