c++ - 是否可以将三个数字插入到 2 个字节的变量中?

标签 c++ bit-shift

例如,我想存储包含日、月、年的日期。

  • 天-> 31 , 月 -> 12 , 年 -> 99 .

我要存储31 , 12 , 99在一个变量中,并将使用移位运算符 <<>>操纵它。

我尝试做的事情:

short date = 0;
date = 31; // day
date << 5;
date = 12; // month
date << 7;
date = 99; // year
printf("date: %d\n", date >> 15); // print the first value

但结果是0 . 我不知道这个想法本身是否可行。

最佳答案

是的,这是可能的。我会使用适当的 union 来屏蔽值区域:

union mydate_struct {
    struct {
        uint16_t day : 5;    // 0 - 31
        uint16_t month : 4;  // 0 - 12
        uint16_t year : 7;   // 0 - 127
    };
    uint16_t date_field;
};

这使您的年份范围从 0 到 127。您的决定,如果这足以满足您的实际用例。

关于c++ - 是否可以将三个数字插入到 2 个字节的变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31126714/

相关文章:

go - 具有无符号值的位移给出有符号结果

c - 在c中将 float 打包为13位 float 进行位移位?

C++17 模板推导指南不用于空参数集?

c++ - 直接显示 videoInput 的 YUY2 像素输出

c++ - 如何声明模板类成员类型的指针/引用?

python - 如何在Python中声明32位二进制数和移位列表?

c# - 存储六个单位的最小可能方式

c - 语句 if (counter & (1<<j)) 是什么意思,它是如何工作的?

c++ - COM 和 CoGetClassObject()

c++ - Windows 中的“字段抓取”