C 奇怪的函数变量赋值

标签 c function hex

我在学习如何制作虚拟机时发现了这段代码。但我不知道这个功能是做什么的。你们有人知道这个函数是做什么的吗?

void decode( int instr )
{
instrNum = (instr & 0xF000) >> 12;
reg1     = (instr & 0xF00 ) >>  8;
reg2     = (instr & 0xF0  ) >>  4;
reg3     = (instr & 0xF   );
imm      = (instr & 0xFF  );
}

变量instr = 1。

最佳答案

该函数将变量 instr 中的特定 4 位组(称为 nibbles )保存到其他变量 instrNumreg1、等等(这些其他变量必须具有全局范围,因为它们未在此处定义)。

例如,考虑 instr 是否为 0x1234

instrNum = (0x1234 & 0xF000) >> 12; 
         = (0x1000) >> 12;
         = 1      
reg1 = (0x1234 & 0xF00) >> 8;
     = (0x0200) >> 8;
     = 2
reg2 = (0x1234 & 0xF0) >> 4;
     = (0x0030) >> 4;
     = 3
reg3 = (0x1234 & 0xF);
     = (0x0004);
     = 4
imm = (0x1234 & 0xFF);
     = (0x0034);
     = 52

因此,它获取变量 instr 的每个半字节并将其保存到单独的变量中。最后一个变量 imm 获取最后一个字节。 &>> 是位运算符,AND operator用于分隔位和 right shift operator
为什么要保存这些变量是任何人的猜测,我们需要知道这些变量是什么类型以及它们的用途,但这就是正在发生的事情

关于C 奇怪的函数变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21829818/

相关文章:

c - C 中的 Printf 混淆

c - C 中泛型函数与函数指针数组相比有何缺点?

c++ - 特殊字符 C/C++

r - 如何创建变量(捕获特定阈值的增加)R?

javascript - React 无状态组件——如何组织内部函数?

c - 将数组值传递给另一个函数时出现缓冲区溢出问题

c - Win32 控制台项目问题

java - 转换 0xFF 给我 -1 -> 有符号与无符号?

java - 验证 String 是否为十六进制

c - 如何将 float 写入 C 字符串?