Мне нужно некоторое объяснение относительно следующего фрагмента кода:
Он используется для преобразования десятичных чисел в код двоичных чисел: это из учебника, но это меня озадачивает.
void binary(int);
void main(void) {
int number;
cout << "Please enter a positive integer: ";
cin >> number;
if (number < 0)
cout << "That is not a positive integer.\n";
else {
cout << number << " converted to binary is: ";
binary(number);
cout << endl;
//cin.get();
}
}
void binary(int number) {
int remainder;
if(number <= 1) {
cout << number;
return;
}
remainder = number%2;
binary(number >> 1);
cout << remainder;
//cin.get();
}
Я использовал точку останова, чтобы посмотреть, как данные проходят через программу, но в конце я не могу следить за этим.
Что я вижу:
Он принимает число, и если число ‹= 1, оно печатает это число (0 или 1).
Но перед этим он сначала вычисляет модуль этого числа и добавляет его в остаток. Затем он перемещается немного вправо от числа или делает то же самое, пока число не станет меньше или равно 1.
Но затем он сохраняет «остаток cout» несколько раз (в зависимости от того, сколько 0/1 там рассчитано). Но как это возможно? Является ли остаток буфером? (я думал, что он перезаписывается (потому что это int), но похоже, что биты продолжают добавляться, а затем печататься несколько раз) ???
Может ли кто-нибудь объяснить мне это медленно?