Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Трэш
Зарегистрирован: 06.06.2010 Сообщения: 1
|
Добавлено: Вс Июн 06 2010 18:45 Заголовок сообщения: вопрос о типах в C |
|
|
есть программа вида
...
int n;
......
if(n!=-2)
{...}
....
Вопрос: что изменится при замене строчки if(n!=-2) на строчку if(n!=-2.)? Речь идёт о т.н. "чистом" C.
Понимаю, что вопрос дурацкий, но в моём распоряжении имеется лишь Visual Studio 2005, чей компилятор C++ на эту точку наплевал и не выдаёт никакой разницы.
P.S. Ответ "ничего не изменится" преподом отвергается начисто. |
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Пн Июн 07 2010 14:32 Заголовок сообщения: предел мечтаний совр. молодого программиста -- очередной VS |
|
|
Трэш писал(а): | имеется лишь Visual Studio 2005, чей компилятор C++ на эту точку наплевал и не выдаёт никакой разницы
| сначала вопрос: а как ты узнал, что VC++ не выдаёт разницы? что с чем ты сравниваешь? и -- главное -- при какие опциях компиляции?
из ответа на эти вопросы закономерно вылезет ответ на Трэш писал(а): | что изменится при замене строчки if(n!=-2) на строчку if(n!=-2.)? | "-2." -- это тип реал или дабл, а "-2" -- какой-нибудь из интов. во 2-м случае компилятор должен перед сравнением преобразовать оба числа к одному типу, а именно: к типу "-2.". то есть окончательный размер должен удлиниться
------------------------------------------------------------------------------
предел мечтаний современного молодого программиста -- очередной VS |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Вт Июн 08 2010 20:18 Заголовок сообщения: |
|
|
Строго говоря при объявленном int n, на попытку его сравнения с дробной константой компилятор должен выдать джентельментское предупреждение, мол сравниваете мальца неверно и я константу приведу к целому типу, прежде чем бинарный код генерить. Но выдавать такое или нет, сильно зависит от IDE (среды разработки) и опций с которыми запускается компилятор.
"Чистота" Си тут мало при чем. |
|
Вернуться к началу |
|
|
yw
Зарегистрирован: 21.10.2009 Сообщения: 15
|
Добавлено: Ср Июн 09 2010 23:06 Заголовок сообщения: |
|
|
> я константу приведу к целому типу
Переменную к типу 'double'
Затем сравнятся 2 вещественных значения . Если бы хотя бы одно из них было получено посредством например 'atof' или 'sscanf' , тогда с большой вероятностью (зависит от компилятора) возникнет ошибка в 17-м десятичном знаке , и значения могут оказаться разными . Но в данном случае поведение программы останется прежним после подмены '2' на '2.' |
|
Вернуться к началу |
|
|
|