十六进制如何代表负数(补码举例,计算,分析) | 您所在的位置:网站首页 › 电脑计算器计算补码是什么 › 十六进制如何代表负数(补码举例,计算,分析) |
计算机中表示负数是用补码. 其实计算机内部的数据,都是补码形式存储的.(遵循补码形式的二进制存储) 比如下面一段文字,是我从一个电机的协议中摘出来的.(这里都是十六进制表示方法:::) 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 实验室设备网 版权所有 |