十六进制除以10

问题描述 投票:-2回答:2

我需要将十六进制数字的最后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)更快吗?
c math division
2个回答
0
投票

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

但是,您可以通过常规除法和模运算符实现所需的外观。类似于:

int x = 524297500;
int a = x / 1000; // 524297
int b = x % 1000; // 500

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


0
投票

[[所有数字十进制]

If(出于某种原因,您需要使用移位将整数除以10,而您1则需要将整数转换为BCD format

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

© www.soinside.com 2019 - 2024. All rights reserved.