破解编码面试-数字交换器问题

时间:2019-04-26 10:34:41

标签: algorithm

在“破解编码面试”一书中,第16章存在一个名为“数字交换器”的问题。

任何人都可以在下图中解释突出显示的行吗?

enter image description here

我已经尝试过使用具有双数据类型的加法和减法方法来解决此问题,效果很好。除此之外,该字符串在xor中不起作用。

那么,它对更多数据类型的作用不仅仅限于整数?哪种数据类型会给加减法带来问题?

2 个答案:

答案 0 :(得分:2)

您对浮点数和双打的测试还不够。

如果您尝试使用浮点数1和10'000'000的加法/减法。您将获得10'000'000和0(因为代表制限制)。在这种情况下,Xor也应该可以正常工作。双打的相同问题,但您需要数字之间的更大差异(我认为1和1e16)。有些语言可能会处理这些情况。

对于字符串,您需要使它们的长度相等,然后逐字节应用xor。

总而言之,按位异或将在可以应用的所有情况下为您提供正确的答案。

答案 1 :(得分:1)

XOR解决方案适用于用位表示的任何事物,例如二进制计算机中的任何数据。 sub-add-sub方法遇到问题的数据类型包括

  • 任何具有上溢或下溢特征的类型,例如整数
  • 任何具有精确特征的类型,例如漂浮
  • 没有在某种算术关联中定义的那些操作的任何类型,例如字符串