一个十进制转换十六进制的C语言程序,请问为什么第8、9行a=65535+a+1后就可以输入负数了呢?谢谢!

如题所述

计算机内部整型数用2进制表示,所以无所谓10进制或16进制,他们是输出时的一种显示。
有符号数,最高位是符号位。负数,机内数用补码表示,补码等于原来数,不计符号位的反码加1。有符号数,无符号数表示的数值范围不同。你的 65535+a+1, 可能为了凑成补码 (我未仔细研究)。

十进制转换十六进制可以简单地用输出语句实现:
int a;
printf("input a decimal data:\n");
scanf("%d",&a);
printf("the hex_decimal value is: %#x\n",a);
-------
如果你想用字符串存放16进制数,用 sprintf() 即可:
int a; char s[20];
printf("input a decimal data:\n");
scanf("%d",&a);
sprintf(s,"%#x", a);
printf("the hex_decimal value is: %s\n",s);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-06
转为超出int范围,就使用补数了,,,,,,需要更多范围的类型,如long
相似回答