Другие языки программирования и технологии

C++. Битовое поле.

3. Создать битовое поле для хранения времени (часы, минуты, секунды, миллисекунды). Написать функции для установки и получения времени в(из) битовое(-го) поле(-я). Помогите пожалуйста.
#include <iostream>
using namespace std;

struct t
{
unsigned h:5,m:6,s:6,ms:10;
};

enum z
{
hours,minutes,seconds,ms
};

class time
{
t x;
public:
void set_time(unsigned v,z b);
void put_time();
};

void time::set_time(unsigned v,z b)
{
switch(b)
{
case hours: x.h=v; break;
case minutes: x.m=v; break;
case seconds: x.s=v; break;
case ms: x.ms=v; break;
}
}

void time::put_time()
{
cout << "Московское время - часов: " << x.h << ", минут: " << x.m << ", секунд: " << x.s << ", миллисекунд: " << x.ms << endl;
}

int main()
{
unsigned x;
time w;
cout << "Введите количество часов: "; cin >> x; w.set_time(x,hours);
cout << "Введите количество минут: "; cin >> x; w.set_time(x,minutes);
cout << "Введите количество секунд: "; cin >> x; w.set_time(x,seconds);
cout << "Введите количество миллисекунд: "; cin >> x; w.set_time(x,ms);
w.put_time();
return 1;
}
Мерген-Херел Монгуш
Мерген-Херел Монгуш
76 473
Лучший ответ
typedef struct mytime {
int hour: Х;
int min: У;
...
} mytime;

!!! Вместо х и у подставить количество бит, необходимых и достаточных для хранения данного значения

setmytime(mytime *tm, int hour, int min ...) {
tm->hour = hour;
tm->min = min;
...
}

!!! Дополнить функцию проверками -- например, минуты должны находиться в диапазоне от 0 до 59
Сначала подсчитываешь размер полей:
Миллисекунды 2 в 10 хватит -10 бит
Секунды 2 в 6 хватит - 6 бит
Ну и так далее.. .
Потом создаешь класс и его методы.