十六进制除以10

时间:2019-11-07 14:09:50

标签: c math division

我需要将十六进制数字的最后6个小数位与其余数字分开。

小数点后10位的除法类似于十六进制右移4次(x >> 4)。 我试图向右移动,但我从未获得正确的值。

Hex: 0x7A 11F8 5EE0
Dec: 524.297.500.000

我想将最后6个小数位分隔为一个新变量:

524.297.500.000 -> 524.297
a = 524.297
b = 500.000
repeat time
    0x7A 11F8 5EE0 >> 4

我正在使用十六进制数字。

问题:

  1. 我应右移多少次才能切下最后6个小数位?
  2. 二进制或十六进制的位移位(除以10)更快吗?

3 个答案:

答案 0 :(得分:0)

正如各种评论所说,转移不会实现您想要的。而您想要的东西本身还不清楚!

但是,您可以使用常规除法和模运算符来实现所需的外观。像这样:

row1 = 12; John; 34; developer staff advisor; 

这只是一个简单的答案。另外,您会注意到我使用的数字比您小,并且将后3个(不是6个)小数位分开。那只是因为您的示例太大而无法容纳int(通常为32位长),并且我想展示这个想法,而不是整数类型系统的具体细节。

答案 1 :(得分:0)

[所有数字均为十进制]

如果(无论出于何种原因),您需要使用移位将整数除以10,那么您1则需要将整数转换为要被BCD表示的整数。

根据您使用的是BCD还是打包的BCD,您需要向右移动8位或4位以除以10。

答案 2 :(得分:0)

分别地,移位一定位置数与将位置值除以相同。我不知道那是您困惑的来源。

将此情况考虑为十进制

value: 213423
shifted right by one digit: 21342  (the 3 gets discarded)

我们可以看到这等于除以10并四舍五入:

value: 213423
divide by 10: 21342.3
round down: 21342

移位一位数字和除以10会得到相同的答案,因为每个数字的位置值均为10。

现在,用十六进制每个数字的位置值都是16(十进制),所以右移一位十六进制数字等于除以16(十进制)。

最后,二进制中的每个数字都有一个两位的位置值,因此移位一位数字与除以2(十进制)相同。而且由于二进制的工作原理,四位移位与16除(十进制)相同。

每个人都说“数字不是十进制或十六进制,但您可以表示为十进制或十六进制”是正确的。但是移位操作与表示有关。用十进制除以1等于用除以10。最后的折痕是,在C中,您的 only 选择是以二进制形式进行移位的,这等效于用十进制除以2,4,8 ,16 ...

我希望这能帮助而不是使水面更加混乱!