任意两个整数A,B能否通过某种运算,让计算结果与两个数一一映射?

大漠刀客
  • 185

A,B 两个数通过某种运算结果为C,改运算保证只要A,B不同那么C就不同。
假设这种运算是加法,那么因为 A+B的结果与B+A的结果是相同的,所以加法不合符。

我在别人的代码里看到如下形式计算字典中的Key:
int A, B;
int Key = A << 16 ^ B
Dictionary<int, string>() dic = new Dictionary<int, string>();
string value;
/*
计算value
*/
dic.Add(Key, value);
这里的只要A,B不同,字典插入的值value就不同。需要保证key与value一一对应。

回复
阅读 1.3k
1 个回答

不能。

感觉你想是面向对象编程,一个类型有 A/B 两个属性,要计算对象 HashCode 来重写 Equals 方法,使得当两个对象 A/B 彼此的值均相等时 Equals 返回 true

如果是这样的话,这种位运算倒是也行,只要保证 Hash 冲突的尽可能的比较低就行了。

因为计算机存储数字跟数学是不一样的,计算机能存储的位数有限,而数学的排列组合是无穷的,所以并不能保证每个数均能分配到唯一的值。比如 int 32 位,两个 int 类型的排列组合可能就是 32 位的平方,但 HashCode 值还是 int,没办法都存得下。

而面向对象的编程语言中均规定,若 HashCode 相等,Equals 可能true;但若 HashCode 不相等,Equals 一定false


如果不是我猜的这样,你说一下使用场景吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏