gpt4 book ai didi

c - 给定函数 `decode` ,我如何进行逆运算并将函数写入 `encode` ?

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:31 24 4
gpt4 key购买 nike

基本上,我有一个称为编码的函数,我想做相反的事情,基本上编码成一个十六进制值。另外,可能值得一提的是我是用 C 编写的。

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

有什么办法可以做到这一点,最好是越小越好 :) 我正在考虑这样布局:

int encode(int instrNum, int reg1, int reg2, int reg3, int imm) {
// do conversion to base 2 then base 16
return the_base_16_conversion;
}

理想情况下,我希望它返回一个值,例如 0x6100。

请告诉我,如果这没有意义,我不太擅长写问题:(

最佳答案

如果你有immreg2reg3 是不必要的。使用左移来“撤消”右移。使用按位“或”组合各部分。整个函数看起来像这样:

return ((instrNum  & 0xF) << 12) | ((reg1 & 0xF) << 8) | imm;

如果只能指定imm 或{reg2, reg3} 对之一,您可以在返回语句:

if (!imm) imm = ((reg2 & 0xF) << 8) | (reg3 & 0xF);

关于c - 给定函数 `decode` ,我如何进行逆运算并将函数写入 `encode` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24790070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com