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

发布于 2022-09-12 02:44:51 字数 357 浏览 40 评论 0

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一一对应。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我的痛♀有谁懂 2022-09-19 02:44:51

不能。

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

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

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

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


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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文