C语言中怎么输出一个负16进制的数

问题是:编程从键盘上任意输入一个负的16进制的的整数,要以输入的形式输出。如:输入-FA98,输出:-FA98
非常感谢但是我用的TURBO C 3 运行不出来啊

负数用十六进制表示,通常用的是补码的方式表示。
int a=-3;
在C语言中可以这么输出:printf("%hhx\n", a);
十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
正数的补是它本身;负数的补码是它本身的值每位求反,最后再加一。
例如:求-3的十六进制
3的十六进制为0003,3求反之后是C,再加1,成D,所以-3的十六进制就是:FFFD
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-20
机内数 负数用 补码 表示。
16进制数 数学上 可以有正负,但计算机用的都是 正数,负数写成补码。
如果想打印出 -FA98, 要专门处理 -- 计算绝对值,再打印负号。
-FA98 数值实际上已超 short int 界(TC 上 int 是 short int ),要用 long int.

如果只要 输入-FA98,输出:-FA98,那么用字符串就可以了:
char str[10];
printf("enter -FA98\n");
scanf("%s",str); // 输入-FA98
printf("%s",str); // 输出-FA98
-----------------------------------------

数值的内部转化 字符串到整形 用 sscanf:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main(void)
{
long int a;
char str[10];
printf("enter -FA98\n");
scanf("%s",str);
printf("%s\n",str);
if (str[0]=='-') {
sscanf(&str[1],"%4x",&a); // 转为整型
a = -a; // 添负号
printf("-%X", abs(a)); // 绝对值加负号 输出
} else {
sscanf(&str[0],"%4x",&a); // 转为整型
printf("%X", a); // 输出
}
exit(0);
}本回答被提问者采纳
第2个回答  2010-03-30
#include "stdio.h"
void main()
{
long n;
scanf("%lx",&n);
if (n&0x80000000)
printf("\t-%lx",-n);
else
printf("\n\n%lx",n);
}不知道这样你认为如何??????
第3个回答  2010-03-30
#include <stdio.h>
void main()
{
int i;
scanf("%x",&i);
i=~i;
printf("i=-%x\n",i+1);
}
已编译,可以
第4个回答  2018-02-27
负数用十六进制表示,通常用的是补码的方式表示。
int a=-3;
在C语言中可以这么输出:printf("%hhx\n", a);
十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
正数的补是它本身;负数的补码是它本身的值每位求反,最后再加一。
例如:求-3的十六进制
3的十六进制为0003,3求反之后是C,再加1,成D,所以-3的十六进制就是:FFFD

相似回答