我是C语言程序设计初学者,问十进制-1的十六进制怎么是ffff呢?

ffff是怎么计算来的呢?

要好好看看原理方面的书

计算机编码有:
原码,反码,补码三种

下面都是以16位机为例
原码不用说了,直接把十进制换成二进制是多少就是多少.
1的原码是0x0001
-1的原码是0x8001(最高位设为1也就是二进制的1000 0001转换成16进制就是0x8001)

反码:转换成二进制后取反.

补码:
如果这个数是正数则使用原码.
如果这个数是负数则最高位设为1
然后再把数字转换成二进制后取反码再加一(为什么要加一?因为负数是没有-0的所以加一个.这样正数的表示范围就是0-32767,而负就的表示范围就变成了1-32768可以多表示一个数,同时免去了有-0使0有唯一的表示法.当然补码这样的设计的好处还有:方便了计算机进行数字的加减等运算,你要是看到补码的运算法则就会发现这样设计非常方便)
如-1
最高位为1
后面的15位计算如下:
1的原码:
000 0001
取反:111 1110
取反+1: 111 1111
加上最高位的1就是1111 1111转换成16进制就是0xFFFF

实际上计算机上面都是补码来保存数据的
所以-1转换成16进制就0xFFFF
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-08-22
负数的二进制是将其绝对值按位取反然后加1形成的
1的十六位二进制是0000000000000001
取反后为1111111111111110
然后加1就变为1111111111111111即为FFFF本回答被提问者采纳
第2个回答  2019-07-08
要好好看看原理方面的书
计算机编码有:
原码,反码,补码三种
下面都是以16位机为例
原码不用说了,直接把十进制换成二进制是多少就是多少.
1的原码是0x0001
-1的原码是0x8001(最高位设为1也就是二进制的1000
0001转换成16进制就是0x8001)
反码:转换成二进制后取反.
补码:
如果这个数是正数则使用原码.
如果这个数是负数则最高位设为1
然后再把数字转换成二进制后取反码再加一(为什么要加一
相似回答