Добрый день, есть такой код, переводящий число из 10-й системы в 2-ю.
int x, c;
while (c > 0)
{
std::cout << bool(x&c);
c >>= 1;
}
Допустим, возьмем x = 5, c = 4(как я понял нужно брать такое число, которое в двоичной даст столько же битов сколько в x).
Теперь перейду к bool(x&c)(пик).
После расчетов получаем bool = 1, bool = 0, bool = 1; 101 - 5.
Как работает этот перевод?
возьмем некоторое число, например c = 12, оно имеет двоичный вид 1100 и перед
ними еще 28 нулей в четырехбайтовых числах (индексация справа налево), и если бы вы указали, что x имеет значение 1, тогда ваш код был бы правильным, если не учесть, что увидим зеркальное отражение, а именно 0011
int x = 1, c = 12;
while (c > 0)
{
std::cout << bool(x&c);
c >>= 1;
}
1100 & 1 это 0 // (c & x) с >= 1
0110 & 1 это 0 // c >>= 1
0011 & 1 это 1 // c >>= 1
0001 & 1 это 1 // если сдвинем еще направо, то получим с == 0, и цикл прекратится
Сборка персонального компьютера от Artline: умный выбор для современных пользователей