|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.01.2015, 00:26 | #1 |
Пользователь
Регистрация: 09.11.2014
Сообщений: 40
|
Помогите разобраться с вопросом по СИ.
Сегодня на тесте попался вопрос:
Сколько раз выполнится цикл? char i='0'; while(i<255) printf("i=%d", i++); Я вбил в компилятор и увидел, что ни разу. Но почему? Разве символьные переменные не должны преобразовываться к целочисленным в выражении с другой переменной типа int? |
07.01.2015, 03:43 | #2 |
Участник клуба
Регистрация: 30.07.2008
Сообщений: 1,604
|
Бесконечное количество раз, так как char при переполнении преобразуется в word, поэтому условие остановки цикла никогда не выполняется, так как signed char доходит только до 127 и никогда не доходит до 255. чтобы дошел до 255 должен быть unsigned char. char при объявлении значит знаковый char. то есть один бит уходит на знак а оставшиеся 7 бит на число, а всего в char 8 бит
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
|
07.01.2015, 10:04 | #3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
07.01.2015, 10:56 | #4 | ||
Форумчанин
Регистрация: 07.01.2014
Сообщений: 124
|
Цитата:
Если: char i = '0' то цикл бесконечный. Если: unsigned char i = '0' то цикл выполнится 207 раз. Цитата:
Код:
#define TRUE FALSE //счастливой отладки
|
||
07.01.2015, 16:11 | #5 |
Пользователь
Регистрация: 09.11.2014
Сообщений: 40
|
|
07.01.2015, 16:21 | #6 |
Пользователь
Регистрация: 09.11.2014
Сообщений: 40
|
Только что зашёл на ideone.com и прокомпилировал там. Цикл выполняется бесконечно. Тут видимо 2 случая: либо Pelles С ни разу не выполнил цикл, так как посчитал, что условие неверно; либо он понял, что цикл будет выполняться бесконечно, пропустил его и забил на сообщение об этом пользователю. Я немного изменил код:
#include <stdio.h> int main(void) { char i='0'; while(i<255) printf("lolka"); i++; return 0; } При компиляции компилятор выдал мне: warning #2154: Unreachable code. То есть Pelles C действительно считает условие неверным, в то время как ideone.com считает его верным, но бесконечным. Ну вот и допустим будет у меня в тесте 2 варианта ответа: 1.Цикл не выполнится ни разу; 2.Цикл будет выполнятся бесконечно. И какой из них изволите выбирать, разработчики? Последний раз редактировалось Pug_from_Mordor; 07.01.2015 в 16:29. |
07.01.2015, 17:20 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
07.01.2015, 22:35 | #8 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,759
|
Цитата:
|
|
08.01.2015, 08:00 | #9 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите пожалуйста с одним вопросом ! | Анонимщик | Помощь студентам | 0 | 08.02.2014 23:06 |
помогите с простым вопросом | Тарабаровъ | Microsoft Office Access | 7 | 30.12.2009 20:12 |
помогите с вопросом | darika | Паскаль, Turbo Pascal, PascalABC.NET | 11 | 07.07.2009 16:34 |
Помогите с легким вопросом! (assembler) | NeXor | Помощь студентам | 3 | 27.01.2009 13:18 |
Помогите с вопросом на C/C++ | dilik | Общие вопросы C/C++ | 1 | 07.01.2009 17:42 |