Предсказать вывод следующей программы на Си.
Вопрос 1
|
На первый взгляд, выражение (a * b) / c, кажется, вызывает арифметическое переполнение, поскольку подписанные символы могут иметь значения только от -128 до 127 (в большинстве компиляторов C) и значение подвыражения '(a * b) 'равно 1200. Например, следующий фрагмент кода печатает -80 на 32-разрядной машине с прямым порядком байтов.
char d = 1200; printf ("%d ", d);
Арифметическое переполнение не происходит в исходной программе, и результат программы равен 120. В C символы char и short преобразуются в int для арифметических вычислений. Таким образом, в выражении '(a * b) / c' a, b и c переводятся в int, и переполнения не происходит.
вопрос 2
|
Выход:
a = -10, b = 9
Утверждение 'a = -b–;' компилируется нормально. Унарный минус и унарный декремент имеют сохраненный приоритет и ассоциативность справа налево. Поэтому '-b–' рассматривается как — (b–), что является действительным. Таким образом, -10 будет присвоено «a», а «b» станет 9.
Попробуйте следующую программу в качестве упражнения.
|
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Вывод программы C ++ | Набор 10
- Выход программы C | Комплект 22
- Вывод программы C ++ | Комплект 8
- Вывод программы C ++ | Комплект 9
- Вывод программы C ++ | Набор 7
- Выход программы C | Набор 21
- Вывод программы C ++ | Комплект 6
- Вывод программы C ++ | Комплект 5
- Вывод программы C ++ | Набор 4
- Выход программы C | Комплект 20
- Выход программы C | Набор 23
- Вывод программы C ++ | Комплект 18
- Вывод программы C ++ | Набор 17
- Вывод программы C ++ | Набор 16
- Вывод программы C ++ | Набор 15
0.00 (0%) 0 votes