如何负十六进制转换为十进制
问题描述:
您好,我想知道它是如何可能转换为十六进制负值(补充编码)为十进制,转换很容易,无须转换十六进制到二进制文件,然后在每个位乘以2的幂并总结所有的值来获得结果,这需要太多时间: 数字示例(32位):0xFFFFFE58如何负十六进制转换为十进制
那么我该怎么做呢?
答
无需使用电脑就可以这样计算的话:
0xFFFF FE58 = - 0x1A8 = -(1 * 16² + 10 * 16 + 8) = -(256 + 160 + 8) = -424
0xFFFF FE58
是2的补负数。要获得绝对值,必须将所有位反转并将二进制数加1。您还可以减去从第一数目,此数字超出范围(为0x1 0000 0000)
0x100000000
-0x0FFFFFE58
=
0x0000001A8
现在我们知道你的电话号码是-0x1A8
。现在你必须加上数字乘以他们的位置值。 8 * 16^0 + A(即10)* 16^1 + 1 * 16^2 = 424.所以你的数字的十进制值是-424。
答
做的正数的计算,然后将转换为负二进制补码。
看到这里的解释为正值,从六到小数点:
http://www.permadi.com/tutorial/numHexToDec/
基本上是:
- 获取十六进制数字的最右边的数字,称这个数字的currentDigit。
- 做一个变量,让我们称之为力量吧。的值设置为0
- 乘当前位与(16 ^功率),存储结果。
- 递增功率1.
- 将currentDigit设置为十六进制数的前一位数。
- 重复步骤3直到所有数字相乘。
- 总和步骤3的结果得到的答案数量。
电脑任意数量通常被认为是二进制文件。 – someuser 2014-09-04 11:05:03
我不确定你的小数应该表示什么样的表示。试过'sprintf(缓冲区,“%d”,0xFFFFFE58);'? – 2014-09-04 11:05:04
你怎么能做什么?读取十六进制数字并打印为小数点?请澄清你的问题 – 2014-09-04 11:10:27