| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > помогите решить задачу |
| Автор: Leere 18.9.2005, 19:21 |
| записать на Си выражение, истинное при выполнении указанного условия и ложное в противном случае, если только одно из чисел x, y, z положительно. Заранее спасибо. Очень срочно. |
| Автор: Mayk 18.9.2005, 19:30 | ||||
Решение в лоб:
Решение для настоящих извращенцев:
Кол-во операций во втором вроде меньше (в первом 9 операций сравнения и 6 AND'ов и 2 OR'а. 9+6+2=17. Во втором 3 сдвига, 2 сложения, 3 вычитания, одно сравнение. 3+2+3+1=9 Добавлено @ 19:37 Вот еще можно. ((a > 0) + (b > 0) + (c > 0) == 1) - кол-во положительных чисел равно 1 |
| Автор: bel_nikita 18.9.2005, 21:14 | ||
| Так можно проверить самый старший бит. Если он в единице - отрицательное число Вот, примерчик при условии, что sizeof(int) равно 4 байта:
З.Ы.: можно конечно IsNegativeNumber через шаблон написан, но автору топика я думаю и этого будет достаточно |
| Автор: Mayk 18.9.2005, 21:18 |
| Возможна загвоздка - 0 не является положительным числом в строгом смысле(во всяком случае различают понятия неотрицательное число и положительное число). Хотя с другой стороны во флоатах существуют положительные и отрицательные нули. |
| Автор: Romikgy 19.9.2005, 09:28 | ||
|
| Автор: Leere 20.9.2005, 11:01 |
| 2Mayk, 2 bel nikita : Пасибо, вы меня спасли от недопуска к лабораторке! |
| Автор: sergejzr 20.9.2005, 20:21 |
| Тема перенесена из С++ |