【发布时间】:2025-12-23 14:55:16
【问题描述】:
我正在尝试创建一个 48 位整数值。我知道可以使用 char 数组或结构,但我希望能够进行位掩码/操作,但我不确定如何做到这一点。
目前该程序使用 16 位 uint,我需要将其更改为 48。它是一个字节码解释器,我想将内存寻址扩展到 4GB。我可以只使用 64 位,但这会浪费很多空间。
以下是代码示例:
unsigned int program[] = { 0x1064, 0x11C8, 0x2201, 0x0000 };
void decode( )
{
instrNum = (program[i] & 0xF000) >> 12; //the instruction
reg1 = (program[i] & 0xF00 ) >> 8; //registers
reg2 = (program[i] & 0xF0 ) >> 4;
reg3 = (program[i] & 0xF );
imm = (program[i] & 0xFF ); //pointer to data
}
完整程序:http://en.wikibooks.org/wiki/Creating_a_Virtual_Machine/Register_VM_in_C
【问题讨论】:
-
对于 4GB 来说 32 位不够大吗?
-
这当然是可能的,但是如果您选择(更简单、更高效)64 位选项,那么拥有这 16 个未使用的位有那么大吗?
-
浪费大量空间:D?你打算在什么机器上运行它? 48 = 16*3,因此您可以使用位集:3 个 16 位整数(或 6 个 8 位整数)的数组。
-
@chux:不,因为它包含字节码指令以及内存位置。
-
建议使用 64 位
int,但创建特殊代码以有效存储它们的数组 - 删除第 4 个字节。顺便说一句:我一直使用带有嵌入式处理器的int24_t和int48_t。
标签: c bit-manipulation bytecode bitmask