Cコードで16ビットから32ビットへの符号拡張を実装するにはどうすればよいですか?
ビット演算子を使用することになっています。足し算と引き算も必要です。誰かが私を正しい方向に向けることができますか? 私は最初の4つをやったが、残りは混乱している. for
ケースの 1 つで、どこかにループを組み込む必要があります。
算術演算子 ( +
、-
、/
、*
)を使用することは許可されておらず、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;
}