Size: a a a

2019 September 25

АВ

Алексей Волков in #UWDC
В прошлый раз слишком быстро решили задачу, поэтому в этот раз их две :) Победит тот, кто первый напишет здесь правильное решение обеих задач в одном сообщении.

1. Что не так с этим циклом? (Да, это Си)
for (unsigned int level = 100; level >= 0; --level) { }

2. Объясните, что проверяет это условие: ((x-1) & x) == 0
* уточнение для JS, x — это число

Приз сегодня — карманный фонарик-брелок с зарядкой по USB:
https://i.gyazo.com/85f83be9d393cfdfbaf21217705809a6.png

Спонсор приза сегодня — компания UNIT6.

(кстати, кто готов поддержать эту идею, став спонсорами приза — пишите мне)
источник

DN

Danila Nikonets in #UWDC
Алексей Волков
В прошлый раз слишком быстро решили задачу, поэтому в этот раз их две :) Победит тот, кто первый напишет здесь правильное решение обеих задач в одном сообщении.

1. Что не так с этим циклом? (Да, это Си)
for (unsigned int level = 100; level >= 0; --level) { }

2. Объясните, что проверяет это условие: ((x-1) & x) == 0
* уточнение для JS, x — это число

Приз сегодня — карманный фонарик-брелок с зарядкой по USB:
https://i.gyazo.com/85f83be9d393cfdfbaf21217705809a6.png

Спонсор приза сегодня — компания UNIT6.

(кстати, кто готов поддержать эту идею, став спонсорами приза — пишите мне)
1. будет бесконечный цикл из за unsigned int (не может быть меньше 0)
2. является ли число степенью 2
источник

МM

Мikhаil M in #UWDC
первый простой, про второй интересно
источник

АВ

Алексей Волков in #UWDC
Полностью верного ответа еще нет :)
источник

DN

Danila Nikonets in #UWDC
куда еще полнее?)
источник

V

Vik in #UWDC
в первом проблема в том что при level = 0, от него будет отнята 1 а это ошибка
источник

D

Danil in #UWDC
нет, там бесконечный
источник

V

Vik in #UWDC
а должен быть range error
источник

D

Danil in #UWDC
ну первая мысль тоже такой была
источник

D

Danil in #UWDC
но нет)
источник

МM

Мikhаil M in #UWDC
ну на сотой итерации переменная level станет равна 4294967295 и цикл зациклится
источник

V

Vik in #UWDC
ну это потому что C
источник

AK

Alan Khugaev in #UWDC
Произойдет переполнение и переменная станет равна max uint, ну раньше такой хак, для всяких раунд робин балансеров использовали
источник

V

Vik in #UWDC
в "нормальном языке" должно бы вывалится в рантайме
источник

ИШ

Игорь Шевченко in #UWDC
Алексей Волков
В прошлый раз слишком быстро решили задачу, поэтому в этот раз их две :) Победит тот, кто первый напишет здесь правильное решение обеих задач в одном сообщении.

1. Что не так с этим циклом? (Да, это Си)
for (unsigned int level = 100; level >= 0; --level) { }

2. Объясните, что проверяет это условие: ((x-1) & x) == 0
* уточнение для JS, x — это число

Приз сегодня — карманный фонарик-брелок с зарядкой по USB:
https://i.gyazo.com/85f83be9d393cfdfbaf21217705809a6.png

Спонсор приза сегодня — компания UNIT6.

(кстати, кто готов поддержать эту идею, став спонсорами приза — пишите мне)
1. будет бесконечный цикл из за unsigned int (не может быть меньше 0)
2. является ли число степенью 2 или нулем
источник

D

Danil in #UWDC
Vik
в "нормальном языке" должно бы вывалится в рантайме
вто ты чо такой душный?)
источник

AK

Alan Khugaev in #UWDC
Vik
в "нормальном языке" должно бы вывалится в рантайме
Это нормальное поведение;)
Такие места должны подсвечиваться статическим анализатором. Но если человеку нужно по кругу перебирать uint, почему бы и нет
источник

V

Vik in #UWDC
потому что это бэд практик
источник

V

Vik in #UWDC
но для C можно, ибо  так задумано
источник

V

Vik in #UWDC
но я воспитан строгими компиляторами 😊
источник