C语言中字符常量'\xA2'对应的数值为什么是102.我用C运行出来是-94,自己算出来是162,答案是102,为啥 .

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/06 21:54:59
C语言中字符常量'\xA2'对应的数值为什么是102.我用C运行出来是-94,自己算出来是162,答案是102,为啥 .
xSNQ#ۙj4@&f}p$c2\;BhK*Дe_3OL ɜk} RJU˨Bu>;Rc/?aHbWؤUs#*:kH| pU ?}?d/7r@ Xdn7Y_ePـD+胧^6, aх pAhGdkXM-<.hMK;.a޷]YFj pYn'rw8l ]6Z! G`j6uH{NVpP]s DےDn;pPV_. &

C语言中字符常量'\xA2'对应的数值为什么是102.我用C运行出来是-94,自己算出来是162,答案是102,为啥 .
C语言中字符常量'\xA2'对应的数值为什么是102.
我用C运行出来是-94,自己算出来是162,答案是102,为啥 .

C语言中字符常量'\xA2'对应的数值为什么是102.我用C运行出来是-94,自己算出来是162,答案是102,为啥 .

之所以用C语言运行出来是因为你肯定用了char类型字符.(最大值是127)

char类型字符是有符号类型,‘\xA2’转为二进制则是:

10100010(最高位为1,意味着这个是一个负数).

获取负数的绝对值的方法是:各位取反,末位加一:

各位取反:

01011101

末位加一:

01011110

十进制就是94,所以运行结果是-94.

如果想正确转,可以使用unsigned char类型,或者使用共用体:

typedef union _A
{
char a;
int s;
}A;
int main()
{
A aa;
aa.s=0;//把aa初始化为0
aa.a='\xA2';
printf("%d",aa.s);
return 0;
}

至于答案为什么写的是102,要么答案错,要么你给的题目不完整.但我觉得答案错的可能性更大,因为答案的思路很可能是10*10+2,把十六进制误当做成10进制.