Господа, объясните плиз мне, темному... где грабли? в упор не вижу.
вот есть такой код:
GSQL_DEBUG ("format parsed: %s", dt_format_parsed);
GSQL_DEBUG ("DateTime: %llu", dt->dt);
GSQL_DEBUG ("shift: [%d] value[%llu] mask[%d] value [%d]", dt_ms[0].shift, dt->dt >> dt_ms[0].shift,
dt_ms[0].mask, dt->dt >> dt_ms[0].shift & (dt_ms[0].mask));
GSQL_DEBUG ("shift: [%d] value[%llu] mask[%d] value [%d]", dt_ms[1].shift, dt->dt >> dt_ms[1].shift,
dt_ms[1].mask, (dt->dt >> dt_ms[1].shift) & dt_ms[1].mask);
GSQL_DEBUG ("shift: [%d] value[%llu] mask[%d] value [%d]", dt_ms[2].shift, dt->dt >> dt_ms[2].shift,
dt_ms[2].mask, (dt->dt >> dt_ms[2].shift) & dt_ms[2].mask);
GSQL_DEBUG ("shift: [%d] value[%llu] mask[%d] value [%d]", dt_ms[3].shift, dt->dt >> dt_ms[3].shift,
dt_ms[3].mask, (dt->dt >> dt_ms[3].shift) & dt_ms[3].mask);
GSQL_DEBUG ("shift: [%d] value[%llu] mask[%d] value [%d]", dt_ms[4].shift, dt->dt >> dt_ms[4].shift,
dt_ms[4].mask, (dt->dt >> dt_ms[4].shift) & dt_ms[4].mask);
GSQL_DEBUG ("shift: [%d] value[%llu] mask[%d] value [%d]", dt_ms[5].shift, dt->dt >> dt_ms[5].shift,
dt_ms[5].mask, (dt->dt >> dt_ms[5].shift) & dt_ms[5].mask);
f_tmp = g_strdup_printf (dt_format_parsed, (dt->dt >> dt_ms[0].shift) & dt_ms[0].mask,
(dt->dt >> dt_ms[1].shift) & dt_ms[1].mask,
(dt->dt >> dt_ms[2].shift) & dt_ms[2].mask,
(dt->dt >> dt_ms[3].shift) & dt_ms[3].mask,
(dt->dt >> dt_ms[4].shift) & dt_ms[4].mask,
(dt->dt >> dt_ms[5].shift) & dt_ms[5].mask);
GSQL_DEBUG ("f_tmp: %s", f_tmp);
а вот его выхлоп:
** (lt-gsql:11477): DEBUG: format parsed: %02d/%02d/%d %02d:%02d:%02d
** (lt-gsql:11477): DEBUG: DateTime: 13200622476056071035
** (lt-gsql:11477): DEBUG: shift: [18] value[50356378463959] mask[63] value [0]
** (lt-gsql:11477): DEBUG: shift: [24] value[786818413499] mask[15] value [0]
** (lt-gsql:11477): DEBUG: shift: [28] value[49176150843] mask[65535] value [0]
** (lt-gsql:11477): DEBUG: shift: [12] value[3222808221693376] mask[63] value [0]
** (lt-gsql:11477): DEBUG: shift: [6] value[206259726188376109] mask[63] value [0]
** (lt-gsql:11477): DEBUG: shift: [0] value[13200622476056071035] mask[63] value [0]
** (lt-gsql:11477): DEBUG: f_tmp: 23/00/11 00:33595:00
есть 3 вопроса:
намба раз - почему value [0], т.е. значение = 0?
намба два - при все при этом, этот же сдвиг и наложение маски в f_tmp кладут цифры отличные от ноля?
намба три - в каком месте я наступил на грабли?
зыЖ
dt - есть такой тип:
union _GSQLTypeDateTime
{
struct
{
guint sec:6;
guint min:6;
guint hour:6;
guint day:6;
guint mon:4;
guint year:16;
GSQLTypeDateTime_type dt_type:2;
guint _align64:18;
} datetime;
guint64 dt;
};
в эту структуру заложил вот такую дату:
test.datetime.year = 2099;
test.datetime.mon = 11;
test.datetime.day = 23;
test.datetime.hour = 0;
test.datetime.min = 45;
test.datetime.sec = 59;


Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум сдвиг влево (2022)
- Форум Побитовый сдвиг (2013)
- Форум битовый сдвиг (2012)
- Форум Сдвиг континиума (2006)
- Форум Сдвиг экрана (2006)
- Форум Про сдвиг... (2005)
- Форум Конфликт сдвига/вывода (2016)
- Форум NTP со сдвигом (2020)
- Форум cacti: сдвиг графиков (2014)
- Форум Сдвиг в zsh (2013)