Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маленькая задачка, с небольшим подвохом 
V
    Опции темы
nickless
Дата 22.1.2009, 00:31 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Недавно наткнулся на такую задачку, возможно кому-нибудь тоже будет интересно.

Имеется C/C++ код:
Код

int foo(int x)
{
    return x != 0 && x == -x;
}


Вопрос: Может ли функция foo вернуть не 0, почему и от чего это зависит.

Если кто знает, не пишите сразу решение, пусть другие немного подумают smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
REZiaMIX
Дата 22.1.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Придумал почему может , но это не то  , что тут задумано))))


--------------------
user posted image
PM MAIL   Вверх
ISergeyN
Дата 22.1.2009, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 11.10.2008
Где: Україна

Репутация: нет
Всего: 2



здесь что-то с нулём связано так как 
Код

int x = 0;
if( x == -x )
    cout<<"ok"<<endl;

PM MAIL Skype   Вверх
Kallikanzarid
Дата 22.1.2009, 03:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: нет
Всего: 3



Это задача математическая (3й класс), а не на С++  smile 
x = -x => 2x = 0 => x = 0
Эрго, foo всегда будет возвращать 0, если только программа не выполняется на машине, где 0 - булева истина  smile 

Это сообщение отредактировал(а) Kallikanzarid - 22.1.2009, 03:58
PM MAIL   Вверх
nickless
Дата 22.1.2009, 04:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Люди, ну там же специально проверка стоит x != 0 smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
MastEdm
Дата 22.1.2009, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Master
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.12.2005
Где: Москва, МГИУ

Репутация: 1
Всего: 2



Может, если
Код

x = INT_MIN

потому что INT_MIN = –2,147,483,648, а INT_MAX = +2,147,483,647. Хотя зависит, наверное, от компилятора  smile 
PM MAIL   Вверх
Alek86
Дата 22.1.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



все банально
если x - расшарена между 2мя потоками на запись, то ф-я может вернуть и 1 smile

ЗЫ. все ж таки мы программисты, а не математики...

Добавлено через 9 минут и 19 секунд
хотя, если без приколов, то в стандарте вроде как не сказано, что INT_MIN не должен равняться INT_MAX...

Это сообщение отредактировал(а) Alek86 - 22.1.2009, 11:59


--------------------
user posted image    user posted image
PM MAIL   Вверх
vinter
Дата 22.1.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Alek86 @  22.1.2009,  12:56 Найти цитируемый пост)
если x - расшарена между 2мя потоками на запись, то ф-я может вернуть и 1

каким образом? хочешь сказать поток может прервать выполнение другого потока во время проверки?


--------------------
Мой блог
PM MAIL WWW   Вверх
MAKCim
Дата 22.1.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(Alek86 @  22.1.2009,  11:56 Найти цитируемый пост)
если x - расшарена между 2мя потоками на запись

x передается через регистр или стек потока
race'а нет
Цитата(Alek86 @  22.1.2009,  11:56 Найти цитируемый пост)
хотя, если без приколов, то в стандарте вроде как не сказано, что INT_MIN не должен равняться INT_MAX...

а где он равняется?  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
vinter
Дата 22.1.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



че то я не понял, почему INT_MIN == -INT_MIN?


--------------------
Мой блог
PM MAIL WWW   Вверх
Alek86
Дата 22.1.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



MAKCim, про гонки точно, протупил
вопрос не в том, где такое выполняется, а в том, запрещено ли это стандартом

а вообще лично у меня все "нормальные" аргументы в пользу положительного ответа закончились.
если INT_MIN == INT_MAX  - неверно, то я выбираю ответ "нет, по стандарту C++ функция не может вернуть не 0" smile

Добавлено через 2 минуты и 21 секунду
Цитата(vinter @  22.1.2009,  12:25 Найти цитируемый пост)
хочешь сказать поток может прервать выполнение другого потока во время проверки?

да, может, причем это не стандартизировано, то есть когда ОС захочет, тогда и прервет
но тут оно не прокатит :(


--------------------
user posted image    user posted image
PM MAIL   Вверх
vinter
Дата 22.1.2009, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Alek86
Цитата(Alek86 @  22.1.2009,  13:45 Найти цитируемый пост)
если INT_MIN == INT_MAX  - неверно, то я выбираю ответ "нет, по стандарту C++ функция не может вернуть не 0"

дело не в этом INT_MIN игнорит минус, оставаясь также в значении INT_MIN


--------------------
Мой блог
PM MAIL WWW   Вверх
GoldFinch
Дата 22.1.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



задачка про баги С++ %)
PM MAIL ICQ   Вверх
xvr
Дата 22.1.2009, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(GoldFinch @ 22.1.2009,  13:27)
задачка про баги С++ %)

Это не баги а фичи, и не С++ а представления чисел в двоичном дополнительном коде  smile 
PM MAIL   Вверх
vinter
Дата 22.1.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



xvr, а в чем прикол? знак же дожен изменится, - должен сбросить старший разряд


--------------------
Мой блог
PM MAIL WWW   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1354 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.