十六进制如何代表负数(补码举例,计算,分析) 您所在的位置:网站首页 电脑计算器计算补码是什么 十六进制如何代表负数(补码举例,计算,分析)

十六进制如何代表负数(补码举例,计算,分析)

2023-08-17 09:51| 来源: 网络整理| 查看: 265

计算机中表示负数是用补码.

其实计算机内部的数据,都是补码形式存储的.(遵循补码形式的二进制存储)

比如下面一段文字,是我从一个电机的协议中摘出来的.(这里都是十六进制表示方法:::)

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.

总结:

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有