例如,
时val = 0x505050
val1 = 0x005000
结果应该是两个十六进制的添加,即:
0x50a050
我做的是:
int hex;
int channel;
int result;
printf("first hex number: ");
scanf("%x", &hex);
printf("second hex number: ");
scanf("%x", &channel);
result = hex + channel;
printf("Your new hex value is: ");
printf("0x%x\n", result);
这给我带来了正确的结果。但是,这里的问题是,当第二个(通道)值类似时,
50 00 00
它是基数10,而不是16,所以0x505050和50 00 00的加法应该是0x825050,但我得到0x5050a0。
我该如何处理这个问题? 此外,当第二个输入不是十六进制且它是负数时,例如,
-50 -40 -30
我得到0x505000,但它应该是0x1e2832
如何处理负数?
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
您必须以文本形式收集输入,然后浏览自己的创建逻辑,以确定文本是否应解释为base16,base10或其他内容:
char input[1024];
fgets(input, 1024, stdin);
// Examine input to figure out if base16, or base10.
<小时/> 您还写道
500000(base10) + 0x505050(base16)
应为0x825050(base16)
。但是当我把它们加在一起时,我得到了0x57F170(base16)
请澄清你的数学?