我需要将十六进制数字的最后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
我正在使用十六进制数字。
问题:
答案 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 ...
我希望这能帮助而不是使水面更加混乱!