powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему бесконечный цикл?
25 сообщений из 86, страница 1 из 4
Почему бесконечный цикл?
    #38742996
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
int counter = 0;

for (int i = int.MaxValue - 1; i <= int.MaxValue; i++)
{
   counter++;
   Console.WriteLine(counter);
}

Console.WriteLine(counter);


Почему тут цикл бесконечный? Ответ "цикл бесконечный по определению - все значения int меньше или равны int.MaxValue." мне непонятен. Максимальное значение для int 0x7FFFFFFF. На втором шаге цикла будет то же значение
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743008
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что переполнение.
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743011
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучПотому что переполнение.+1
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743015
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxix, лень Console.WriteLine(i) добавить в тело цикла и посмотреть?
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743017
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучПотому что переполнение.
Вот это нормальный ответ.
Но почему "цикл бесконечный по определению - все значения int меньше или равны int.MaxValue."??? Это можно считать правильным ответом?
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743019
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAsaxix, лень Console.WriteLine(i) добавить в тело цикла и посмотреть?
Да я пробовал.
И так попробовал
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 const int max = 0x7FFFFFFF;
            
            int counter = 0;

            for (int i = max - 1; i <= max; i++)
            {
                counter++;
                Console.WriteLine(counter);
            }

            Console.WriteLine(counter);


Но вот ответ мне не понятен, который автор задачи предложил
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743028
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxix, представьте Int32.MaxValue в двочном виде и дайте правильный ответ.
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743033
Grunch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что бы произошел выход из цикла необходимо что бы i приняло значение int.MaxValue + 1, однако int не может принять такое значение, потому что "все значения int меньше или равны int.MaxValue"
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743034
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixНо почему "цикл бесконечный по определению - все значения int меньше или равны int.MaxValue."??? Это можно считать правильным ответом?Для начала было бы здорово услышать формальное определение бесконечного цикла. Но интуитивно понятно, что условие "i <= int.MaxValue" для "int i" всегда будет истинным и поэтому условие выхода никогда не сработает.
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743035
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAsaxix, представьте Int32.MaxValue в двочном виде и дайте правильный ответ.
0x7FFFFFFF
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743039
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxix,

Вот это ни на какие размышления не наводит?
Код: c#
1.
2.
3.
4.
var x = 0x7FFFFFFF - 1;
Console.WriteLine(x++);
Console.WriteLine(x++);
Console.WriteLine(x++);
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743040
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixskyANAsaxix, представьте Int32.MaxValue в двочном виде и дайте правильный ответ.
0x7FFFFFFF
А, в двоичном будет 1111111111111111111111111111111
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743042
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixskyANAsaxix, представьте Int32.MaxValue в двочном виде и дайте правильный ответ.
0x7FFFFFFFПрикалываетесь? Это шестнадцатиричный вид.
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743044
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrunchЧто бы произошел выход из цикла необходимо что бы i приняло значение int.MaxValue + 1, однако int не может принять такое значение, потому что "все значения int меньше или равны int.MaxValue"
Все. Теперь понятно.
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743047
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAsaxixпропущено...

0x7FFFFFFFПрикалываетесь? Это шестнадцатиричный вид.
Не дочитал. Поправил.
Я просто не сообразил что for пытается счетчику ещё и maxvalue + 1 присвоить. Думал что на maxvalue все заканчивается
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743049
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixsaxixпропущено...

0x7FFFFFFF
А, в двоичном будет 1111111111111111111111111111111Вот!

0111 1111 1111 1111 1111 1111 1111 1111

прибавляем единичку и получаем

1000 0000 0000 0000 0000 0000 0000 0000

или -2147483648,
или Int32.MinValue

То есть "все значения int меньше или равны int.MaxValue".
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743053
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixskyANAпропущено...
Прикалываетесь? Это шестнадцатиричный вид.
Не дочитал. Поправил.
Я просто не сообразил что for пытается счетчику ещё и maxvalue + 1 присвоить. Думал что на maxvalue все заканчиваетсяХватит глупости писать.
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743054
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAsaxixпропущено...

Не дочитал. Поправил.
Я просто не сообразил что for пытается счетчику ещё и maxvalue + 1 присвоить. Думал что на maxvalue все заканчиваетсяХватит глупости писать.
Ступил. Не посмотрел что сначала в for идет присваивание, потом только сравнение.
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743060
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixskyANAпропущено...
Хватит глупости писать.
Ступил. Не посмотрел что сначала в for идет присваивание, потом только сравнение.У Вас пробелы в знании синтаксиса C# и типов.
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743091
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAsaxixпропущено...

Ступил. Не посмотрел что сначала в for идет присваивание, потом только сравнение.У Вас пробелы в знании синтаксиса C# и типов.
Ну в данном случае типы точно не причем )))
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743102
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще

Почему тут true
Код: c#
1.
2.
3.
float begin = 100000000;
float end = 100000001;
Console.WriteLine(begin==end);


А тут false
Код: c#
1.
2.
3.
float begin = 10000000;
float end = 10000001;
Console.WriteLine(begin==end);


Почему для больших значений float нет разницы между 100000000 и 100000001 и т.п.
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743108
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixЕще

Почему тут true
Код: c#
1.
2.
3.
float begin = 100000000;
float end = 100000001;
Console.WriteLine(begin==end);


А тут false
Код: c#
1.
2.
3.
float begin = 10000000;
float end = 10000001;
Console.WriteLine(begin==end);


Почему для больших значений float нет разницы между 100000000 и 100000001 и т.п.
Считается что это бесконечность?
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743128
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixskyANAпропущено...
У Вас пробелы в знании синтаксиса C# и типов.
Ну в данном случае типы точно не причем )))Ахаха. Вы продолжаете писать глупости.

int (Int32) - это 32-разрядное целое число со знаком. 32-ой бит используется в качестве знакового бита (0 - число положительно, 1 - отрицательное).

Как бы двоичное представление наглядно показывает, что i становится отрицательным на третьей итерации и цикл продолжается бесконечно.
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743129
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixЕще

Почему тут true
Код: c#
1.
2.
3.
float begin = 100000000;
float end = 100000001;
Console.WriteLine(begin==end);


А тут false
Код: c#
1.
2.
3.
float begin = 10000000;
float end = 10000001;
Console.WriteLine(begin==end);


Почему для больших значений float нет разницы между 100000000 и 100000001 и т.п.Это магия, "типы точно не причем"
...
Рейтинг: 0 / 0
Почему бесконечный цикл?
    #38743132
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAsaxixпропущено...

Ну в данном случае типы точно не причем )))Ахаха. Вы продолжаете писать глупости.

int (Int32) - это 32-разрядное целое число со знаком. 32-ой бит используется в качестве знакового бита (0 - число положительно, 1 - отрицательное).

Как бы двоичное представление наглядно показывает, что i становится отрицательным на третьей итерации и цикл продолжается бесконечно.
Да Вы не поняли в чем я запутался. Запутался в поведении for.
...
Рейтинг: 0 / 0
25 сообщений из 86, страница 1 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему бесконечный цикл?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]