刚接触C语言 有这样一句话 说是:0xfff1和-0x800f等价 都等于10进制的-15什么意思?

我在网上查了,有人说这个是补码和源码 看过后还是不太明白 我怎么知道一个16进制数是源码还是补码 是不是在C语言编程中 输入0x表示16进制 代表的都是补码? 求高人给予详细的解释 谢谢

整形数据在内存里以二进制存放,负数便以补码的方式存放。
取负数的补码方法:先取绝对值,取反,再加1。
以-15举例(两字节):
-15原码: 1000000000001111 0x800f
15的原码: 0000000000001111 0x000f
取反: 1111111111110000 0xfff0
加1得-15的补码:1111111111110001 0xfff1
有符号整形数据二进制里首字符为1的为负数。0x代表16进制,不一定代表补码。
有符号整形数据十六进制0x8的是补码。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-03
输入0x表示十六进制,但不是补码追问

那这两个数是等价的 怎么回事?都等于-15 我也看过别人给的解释但是看不太明白 能给我详细的解释吗?

第2个回答  2012-07-04
我也是,编程寻找2^32+1的约数:
#include "stdio.h"
void main()
{
unsigned long i=0x100000001;
unsigned int j=2;
printf("%u",i);
for(;j<=0x100001;j++)
if ((i%j)==0) {printf("%u",j); break;}
}
结果为:1
第3个回答  2012-07-04
你应该多看书,真的,这个都好基础的
第4个回答  2012-07-04
没对
0x800f 是signed -32753
unsigned 32783