C++ 只寻址一个单词的15位

C++ 只寻址一个单词的15位,c++,c++builder,C++,C++builder,在一个包含多种成员的类中,我希望以下两个变量一起只占用2个字节: WORD wA:15 bool bB:1 我还尝试了int而不是WORD(intwa:15) 其目的是让它们只一起使用16位 有没有办法做到这一点? 在代码中执行位操作将意味着更改现有代码。我希望我可以通过简单地用建议的方式重新定义变量来做到这一点 我使用Borland C++ +Builder 2009 你需要指示编译器打包结构,没有填充: #pragma pack class { ... 或 或 您需要指示编译器在不填充

在一个包含多种成员的类中,我希望以下两个变量一起只占用2个字节:

WORD wA:15
bool bB:1
我还尝试了
int
而不是
WORD
intwa:15

其目的是让它们只一起使用16位

有没有办法做到这一点? 在代码中执行位操作将意味着更改现有代码。我希望我可以通过简单地用建议的方式重新定义变量来做到这一点


我使用Borland C++ +Builder 2009

你需要指示编译器打包结构,没有填充:

#pragma pack
class { ...


您需要指示编译器在不填充的情况下打包结构:

#pragma pack
class { ...


您需要指示编译器在不填充的情况下打包结构:

#pragma pack
class { ...


您需要指示编译器在不填充的情况下打包结构:

#pragma pack
class { ...


我想你们必须为钻头包装申报相同的型号 i、 e

但它可能是特定于平台的

例如,此结构的大小为2,类似于类型
short int

struct test {
    short int a:15;
    short int b:1;
};

我想你们必须为钻头包装申报相同的型号 i、 e

但它可能是特定于平台的

例如,此结构的大小为2,类似于类型
short int

struct test {
    short int a:15;
    short int b:1;
};

我想你们必须为钻头包装申报相同的型号 i、 e

但它可能是特定于平台的

例如,此结构的大小为2,类似于类型
short int

struct test {
    short int a:15;
    short int b:1;
};

我想你们必须为钻头包装申报相同的型号 i、 e

但它可能是特定于平台的

例如,此结构的大小为2,类似于类型
short int

struct test {
    short int a:15;
    short int b:1;
};

这些都是类内部的,实现没有按照您想要的方式打包它们,所以为什么不自己打包呢

//typedef unsigned short WORD;
private:
    WORD twobytebuffer;
public:
    WORD getA() {return 0x7fff & twobytebuffer;}
    bool getB() {return (twobytebuffer>>15 == 1);}

这些都是类内部的,实现没有按照您想要的方式打包它们,所以为什么不自己打包呢

//typedef unsigned short WORD;
private:
    WORD twobytebuffer;
public:
    WORD getA() {return 0x7fff & twobytebuffer;}
    bool getB() {return (twobytebuffer>>15 == 1);}

这些都是类内部的,实现没有按照您想要的方式打包它们,所以为什么不自己打包呢

//typedef unsigned short WORD;
private:
    WORD twobytebuffer;
public:
    WORD getA() {return 0x7fff & twobytebuffer;}
    bool getB() {return (twobytebuffer>>15 == 1);}

这些都是类内部的,实现没有按照您想要的方式打包它们,所以为什么不自己打包呢

//typedef unsigned short WORD;
private:
    WORD twobytebuffer;
public:
    WORD getA() {return 0x7fff & twobytebuffer;}
    bool getB() {return (twobytebuffer>>15 == 1);}

你所展示的代码有什么问题?顺便问一下,除非你为RAM大小在千字节范围内的嵌入式平台而不是虚拟内存在千兆字节范围内的现代PC编程,否则你真的需要节省一些位(并使程序在这个过程中变得更复杂)?@JoachimPileborg,我希望它只有2个字节,以一个比现在小8个字节的对象结束。我有一个布尔太多了,所以我最终得到了一个大8字节的结构(我希望它是8字节对齐的)。我希望将这两个变量组合在2个字节中,因为15位就足够存储数据了wA@JoachimPileborg,我最终在内存中加载了数百万个这样的对象,我希望它们尽可能小,并且仍然保持8字节对齐。当你说“加载”时,我假设你是从一个文件加载它们的?它是一个二进制文件(结构按原样存储)?如果是这样,您可能应该对文件进行内存映射,而不是将条目加载到堆分配的内存中。然后,除非数据是千兆字节,并且您在32位系统上,否则您仍然可以将所有数据放入内存。即使32位地址空间中有太多内容,您也可能不需要映射整个文件,只需映射其中的一部分。您所显示的代码有什么问题吗?顺便问一下,除非你为RAM大小在千字节范围内的嵌入式平台编程,而不是为虚拟内存在千兆字节范围内的现代PC编程,那么你真的需要节省一些位(并使你的程序在这个过程中更加复杂)?@JoachimPileborg,我只希望它是2字节,以比现在小8字节的对象结束。我有一个布尔太多了,所以我最终得到了一个大8字节的结构(我希望它是8字节对齐的)。我希望将这两个变量组合在2个字节中,因为15位就足够存储数据了wA@JoachimPileborg,我最终在内存中加载了数百万个这样的对象,我希望它们尽可能小,并且仍然保持8字节对齐。当你说“加载”时,我假设你是从一个文件加载它们的?它是一个二进制文件(结构按原样存储)?如果是这样,您可能应该对文件进行内存映射,而不是将条目加载到堆分配的内存中。然后,除非数据是千兆字节,并且您在32位系统上,否则您仍然可以将所有数据放入内存。即使32位地址空间中有太多内容,您也可能不需要映射整个文件,只需映射其中的一部分。您所显示的代码有什么问题吗?顺便问一下,除非你为RAM大小在千字节范围内的嵌入式平台编程,而不是为虚拟内存在千兆字节范围内的现代PC编程,那么你真的需要节省一些位(并使你的程序在这个过程中更加复杂)?@JoachimPileborg,我只希望它是2字节,以比现在小8字节的对象结束。我有一个布尔太多了,所以我最终得到了一个大8字节的结构(我希望它是8字节对齐的)。我希望将这两个变量组合在2个字节中,因为15位就足够存储数据了wA@JoachimPileborg,我最终在内存中加载了数百万个这样的对象,我希望它们尽可能小,并且仍然保持8字节对齐。当你说“加载”时,我假设你是从一个文件加载它们的?它是一个二进制文件(结构按原样存储)?如果是这样,您可能应该对文件进行内存映射,而不是将条目加载到堆分配的内存中。然后,除非数据是千兆字节,并且您在32位系统上,否则您仍然可以将所有数据放入内存。即使32位地址空间中有太多的内容,您可能也不需要映射整个文件,只需映射i的一部分