我将如何在 C 代码中实现从 16 位到 32 位的符号扩展?
我应该使用按位运算符。我还需要加减;谁能指出我正确的方向?我做了前4个,但对其余部分感到困惑。对于其中一种情况,我还必须在某处合并一个for
循环。
我不允许使用任何算术运算符(+
, -
, /
, *
),也不允许使用任何if
语句。
这是我当前正在编辑的 switch 语句的代码:
unsigned int csc333ALU(const unsigned int opcode,
const unsigned int argument1,
const unsigned int argument2) {
unsigned int result;
switch(opcode) {
case(0x01): // result = NOT argument1
result = ~(argument1);
break;
case(0x02): // result = argument 1 OR argument 2
result = argument1 | argument2;
break;
case(0x03): // result = argument 1 AND argument 2
result = argument1 & argument2;
break;
case(0x04): // result = argument 1 XOR argument 2
result = argument1 ^ argument2;
break;
case(0x05): // result = 16 bit argument 1 sign extended to 32 bits
result = 0x00000000;
break;
case(0x06): // result = argument1 + argument2
result = 0x00000000;
break;
case(0x07): // result = -argument1. In two's complement, negate and add 1.
result = 0x00000000;
break;
default:
printf("Invalid opcode: %X\n", opcode);
result = 0xFFFFFFFF;
}