任意两个整数A,B能否通过某种运算,让计算结果与两个数一一映射?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不能。
感觉你想是面向对象编程,一个类型有 A/B 两个属性,要计算对象 HashCode 来重写 Equals 方法,使得当两个对象 A/B 彼此的值均相等时 Equals 返回
true
?如果是这样的话,这种位运算倒是也行,只要保证 Hash 冲突的尽可能的比较低就行了。
因为计算机存储数字跟数学是不一样的,计算机能存储的位数有限,而数学的排列组合是无穷的,所以并不能保证每个数均能分配到唯一的值。比如 int 32 位,两个 int 类型的排列组合可能就是 32 位的平方,但 HashCode 值还是 int,没办法都存得下。
而面向对象的编程语言中均规定,若 HashCode 相等,Equals 可能为
true
;但若 HashCode 不相等,Equals 一定为false
。如果不是我猜的这样,你说一下使用场景吧。