0
私は与えられた16進数を2の補数に変換しようとしていますが、私のプログラムでは何か奇妙なことが起こります。 (代入は、8進数、2進数、16進数、または10進数の2つの数値を取り、加算/減算してから指定の基数に変換することです)16進数から2の補数への変換
私は次のコマンドを使用します:./a.out + x1111 x1111 X
#include <stdio.h>
int main (int argc, char* arg[]){
int num1=0, num2=0, converted = 0;
if ((argc < 5) || (argc > 5))
{
printf("ERROR: please enter input in the following format\n");
printf("/calc <operation> <number1> <number2> <output base>\n");
}
else{
if (arg[2][0] == 'x'){
num1 = HexAsciiTo2comp(arg[2]);
printf("%d\n", num1);
}
if (arg[3][0] == 'x'){
num2 = HexAsciiTo2comp(arg[3]);
printf("%d\n", num2);
}
}
converted = num1 + num2;
finalOutput(converted, arg[4]);
return 0;
}
int HexAsciiTo2comp(char* hexNum){
int value = 0, i = 1;
printf("The original Hex Value is %s\n", hexNum);
for(i=1; i<9; i++){
switch(hexNum[i]){
case '0': value = value << 4; break;
case '1': value = (value << 4)+1; break;
case '2': value = (value << 4)+2; break;
case '3': value = (value << 4)+3; break;
case '4': value = (value << 4)+4; break;
case '5': value = (value << 4)+5; break;
case '6': value = (value << 4)+6; break;
case '7': value = (value << 4)+7; break;
case '8': value = (value << 4)+8; break;
case '9': value = (value << 4)+9; break;
case 'A': value = (value << 4)+10; break;
case 'B': value = (value << 4)+11; break;
case 'C': value = (value << 4)+12; break;
case 'D': value = (value << 4)+13; break;
case 'E': value = (value << 4)+14; break;
case 'F': value = (value << 4)+15; break;
default:break;
}
}return value;
}
結果がされてしまう:4369の後者の結果が正しい
The original Hex Value is x1111
1118481
The original Hex Value is x1111
4369
しかし第1の出力はありません。 なぜこれが起こっているのでしょうか?