C语言 输入两十六进制 输出他们的和 如果和是正数还正常 要是是负数结果就错了 为什么呢

#include <stdio.h>
#include <ctype.h>
int main ()
{
__int64 x,y;
while (scanf("%I64X%I64X",&x,&y)+1)
{
printf("%I64X\n",x+y);
}
return 0;
}

这个没有错。

十六进制表示负数通常用的是补码的方式表示.
正数的补是它本身.
负数的补码是它本身的值每位求反,最后再加一.

所以屏幕看到的结果是:该数绝对值的补码,再加1

加一条10进制结果输处指令可验证:

示例代码如下,

#include <stdio.h>

#include <ctype.h>

int main ()

{

 __int64 x,y;

 while (scanf("%I64X%I64X",&x,&y)+1) 

 {

  printf("%I64X\n",x+y);

  printf("%d\n",x+y);

 }

 return 0; 

}

示例输出结果如下:

供参考。

温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜