16进制赋值字符串问题。

来源:百度知道 编辑:UC知道 时间:2024/05/02 12:14:44
void main()
{
char x=0xddff; \*这个赋值是怎么回事?是给x赋ff也就是255吗*\
printf("%d\n",x) \*可是最后为什么输出-1 ? *\
}
您没有告诉我为什么是-1 比如我输入 0xddfe的话 就输出-2 为什么呢?

x是有符号字符类型。。计算机中数字用补码表示。。
x=0xddFF=11111111b,换成源码就是-0000001,就是-1.
如果x=0xddfe=11111110换成源码就是-0000010就是-2。

估计你是不知道补码源码转换。。

0xddff是16进制的数,把他赋值给x,就算一个字符了,至于输出什么就不重要了。关于输出-1,很正常,在计算机中它算已补码的形式存放的

你的编译器把char作为signed char处理,所以是负1.
如果按unsigned char处理,输出就是255.
详见
http://zhidao.baidu.com/question/86383577.html