十六进制如何代表负数(补码举例,计算,分析)
计算机中表示负数是用补码.
其实计算机内部的数据,都是补码形式存储的.(遵循补码形式的二进制存储)

比如下面一段文字,是我从一个电机的协议中摘出来的.(这里都是十六进制表示方法:::)
1.下传帧: 0xd8 0x30 0x10 0x00 0xff // 代表控制电机转速为0x1000=4096转每分钟.
2.下传帧: 0xd8 0x30 0xf0 0x00 0xff // 代表控制电机转速位0xf000=- 4096转每分钟.
从上面两条指令中,0xd8 0x30可以认为是包头,不用管.
0xff是包尾,也不用管.
中间标红的是数据位.
可见,这个电机控制的数据只有两个字节.
关于第一条下传帧,它的数据位是,0x10 0x00,合起来就是0x1000,然后我们打开window自带的计算器:在HEX栏,也就是16进制栏,输入1000,

然后可以从对应的DEC栏得到4096,DEC也就是10进制的意思.

上面是正数的验证,得到0x1000就是4096.
这样的方法是否适用于负数呢? 看下图,显然是不行的.

因为输出的十进制(DEC)是61440.
那么应该如何去验证呢?
电机使用手册上说0xf000= - 4096 ,手册上说的例子,一般是不会错的.

进行负数的验证:
下面就会用到一定的计算机基础了,这里的0xf000是补码的形式.
人是不能直观看清补码的,需要转换成原码.
补码如何转换成原码:
负数原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1。
我们用windows系统自带的计算器,就可以进行上面法则的运算.
第一步:把计算器,调整到二进制界面.

第二步:符号位不变,其他的按位取反.
(用鼠标去右击某一个二进制位,就可以进行取反,0变1,1变0)

第三步:末尾再加一.

通过上面的一步后,看到的结果是:36864.
难道0xf000=36864吗?显然不是.
之所以出现36864,是因为windows系统自带的计算器不够智能,
它不知道最高位的1代表负号,而是按照正整数进行的计算.
所以,你需要自己去处理一下.
1001 0000 0000 0000 ,去掉最高位的符号位. (用鼠标右击最高位的1,使1变成0)

然后,就可以看到得到的是4096,
然后因为有符号,就是-4096.
即0xf000= -4096.

总结:
计算机中的负数,都是补码形式的.