59 / 2 = 29 (1), где число в скобках - это остаток
29 / 2 = 14 (1)
14 / 2 = 7 (0)
7 / 2 = 3 (1)
3 / 2 = 1 (1)
1 / 2 = 1 (1), нельзя поделить 1 на 2 без получения дробной части, поэтому в остатке остается та единица, которую мы делили на 2
Снизу вверх восстанавливаем цепочку двоичного кода:
111011₂
Объясняю, почему мы не получили нолик вначале.. Нолик добавляется в запись в основном, чтобы дополнить двоичный код до 8 бит, но в твоем случае это 7 бит. Это ни на что не влияет.
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
short int year[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int month = 0, day = 0, daysUntilNewYear = 0;
while (month == 0)
{
cout << "Введите месяц: ";
cin >> month;
if (month < 1 || month > 12)
{
month = 0;
cout << "В году лишь 12 месяцев, повторите ввод" << endl;
}
}
while (day == 0)
{
cout << "Введите день: ";
cin >> day;
if (day > year[month - 1] || day < 1)
{
day = 0;
cout << "В выбранном месяце " << year[month - 1] << " дней, повторите ввод" << endl;
}
}
for (int i = month - 1; i < 12; i++)
{
daysUntilNewYear += year[i];
}
daysUntilNewYear -= day - 1;
cout << "До Нового Года осталось " << daysUntilNewYear << " дней"<< endl;
system("pause");
return 0;
}
Если через case делать, то будет больше кода и он будет менее понятен - смысла в этом нет, поэтому сделал через while.
0⁶1⁵1⁴1³0²1¹1⁰₂ = 0 · 2⁶ + 1 · 2⁵ + 1 · 2⁴ + 1 · 2³ + 0 · 2² + 1 · 2¹ + 1 · 2⁰ = 0 + 32 + 16 + 8 + 0 + 2 + 1 = 59₁₀
10 → 259 / 2 = 29 (1), где число в скобках - это остаток
29 / 2 = 14 (1)
14 / 2 = 7 (0)
7 / 2 = 3 (1)
3 / 2 = 1 (1)
1 / 2 = 1 (1), нельзя поделить 1 на 2 без получения дробной части, поэтому в остатке остается та единица, которую мы делили на 2
Снизу вверх восстанавливаем цепочку двоичного кода:
111011₂
Объясняю, почему мы не получили нолик вначале.. Нолик добавляется в запись в основном, чтобы дополнить двоичный код до 8 бит, но в твоем случае это 7 бит. Это ни на что не влияет.