c++ - 在 C++ 中定义可以容纳六个值的最小可能数据类型

标签 c++ memory binary memory-management hex

我想定义我自己的数据类型,它可以保存六个可能值中的一个,以便了解有关 c++ 中内存管理的更多信息。在数字中,我希望能够保存 0 到 5。二进制,三位 (101=5) 就足够了,尽管有些(6 和 7)不会被使用。数据类型也应该消耗尽可能少的内存。

我不确定如何完成此操作。首先,我尝试了一个为所有字段定义了值的枚举。据我所知,那里的值是十六进制的,所以一个“hexbit”应该允许我存储 0 到 15。但是将它与 char(带有 sizeof)进行比较,它表示它的大小是 char 的 4 倍,并且如果我没记错的话,一个 char 的值是 0 到 255。

#include <iostream>

enum Foo
{
    a = 0x0, 
    b = 0x1,
    c = 0x2,
    d = 0x3,
    e = 0x4,
    f = 0x5,
};

int main()
{
    Foo myfoo = a;
    char mychar = 'a';

    std::cout << sizeof(myfoo); // prints 4
    std::cout << sizeof(mychar); // prints 1

    return 1;
}

我显然误解了一些东西,但没有看到什么,所以我转向 SO。 :)

此外,在写这篇文章时,我意识到我显然缺少某些词汇。我将此帖子设为社区维基,请对其进行编辑,以便我可以学习所有内容的正确单词。

最佳答案

char 是可能的最小类型。

如果您碰巧知道在一个地方需要多个这样的 3 位值,您可以使用具有位域语法的结构:

struct foo {
  unsigned int val1:3;
  unsigned int val2:3;
};

因此在一个字节内得到其中的 2 个。理论上,您可以将 10 个这样的字段打包成一个 32 位“int”值。

关于c++ - 在 C++ 中定义可以容纳六个值的最小可能数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/740228/

相关文章:

C++ 如何在没有 Win32 API 的情况下制作一个简单的窗口?

perl - 分析 perl 程序的堆内存使用情况

c++ - C++ 中未对齐访问的正确性

java - 将二进制转换为 ascii,ascii 中的旋转字符串 - java

c++ - 为什么最小 MFC 项目在 Visual Studio 2013 上有链接错误?

c++ - 无法创建对 - 构造函数

java - 空 java 程序中的大对象

c++ - 如何在 C++ 程序中使用位值而不是字符?

java - 如何保持写入文件的二进制数据的一致性?

C++ 在 VS 中为 'better' Release模式构建定义