у меня был этот вопрос после прочтения этой нити Print an int in binary representation using CПонимание условия выхода из для цикла
В течение пользователей комментариев, они отправили это цикл, который назначает либо 1 или 0 в битовой позиции для того, чтобы конвертировать из int decimal в char * двоичный.
for(; bits--; u >>= 1)
str[bits] = u & 1 ? '1' : '0';
Я понимаю, почему нет необходимости в инициализированном значении. Это синтаксис для цикла, что я всегда знал:
for (variable initialization; condition; variable update)
То, что я не понимаю, как «bit--» может быть условие выхода. Пожалуйста, помогите мне понять, как работает этот код (я тестировал его, и он действителен).
спасибо.
Это то, что программисты C прокляты! Создание кода, который что-то делает, но никто его не понимает. Не пытайтесь писать такой код! бит - уменьшает битовую переменную, как только она равна нулю, возвращается false – guitarflow
@guitarflow Те, кто понимают C и ее идиомы, понимают такой код как раз очень хорошо, как это очень распространено в коде C (включая книгу K & R), и я бы сказал, что эта идиома должна быть изучена, чтобы понять код С в целом. Итак, почему новый код (на любом языке) должен быть написан для тех, кто не понимает язык? Более «общепринятая» форма может даже усложнить ситуацию для читателя, свободно владеющего языком, т. Е. «Почему он не использовал [общую идиому], есть ли что-то, чего я не хватает?» – Arkku
@Arkku Я также понимаю код , но вы должны согласиться, что это не хороший стиль кодирования. Написание цикла for-loop «стандартным» способом делает его более читаемым для всех, а не только для трещин. Переменные имена, такие как «u», также не являются описательным именем;) – guitarflow