SELECT ( 1000000000000010 ^ 1111111111111111 ) AS XXX FROM `hash` ORDER BY `XXX` ASC
这样的 SQL 语句运行会变成 140677691470285 这样的结果,正确结果难道不是按位异或比对吗?
1
Hieast 2018-06-22 09:35:14 +08:00 via Android
你这不是二进制吧,计组的题没刷够
|
2
90safe OP 如果非要说 XOR 不能运行在二进制上,那么转换为十进制的话。
``` SELECT ( 32770 ^ 65535 ) AS XXX FROM `hash` ORDER BY `XXX` ASC ``` 得出来的结果是__32765__一点也不科学! |
3
ZEOH 2018-06-22 09:38:15 +08:00 3
1000000000000010D = 11100011010111111010100100110001101000000000001010B
1111111111111111D = 11111100101000110010110111000101010111000111000111B 异或运算结果:00011111111111001000010011110100111111000111001101B = 140677691470285D |
4
wwqgtxx 2018-06-22 09:40:26 +08:00
一楼说的是你的 1000000000000010 不是二进制而是十进制。。。
|
5
maichael 2018-06-22 09:41:43 +08:00
结果是对的,只是以 10 进制的形式显示而已。
|
7
joyme 2018-06-22 09:43:52 +08:00
php> $a = 32770 ^ 65535
php> echo $a 32765 php> printf("%b", 32770) 1000000000000010 php> printf("%b", 65535) 1111111111111111 php> printf("%b", 32765) 111111111111101 |
8
newtype0092 2018-06-22 09:44:59 +08:00
select conv(conv(1000000000000010, 2, 10) ^ conv(1111111111111111, 2, 10), 10, 2);
|
9
newtype0092 2018-06-22 09:45:23 +08:00
二进制十进制转换链接一下
|
10
90safe OP ```
SELECT BIT_COUNT( CONV(1000000000000010001100100110101000101010001100100000011010000000,2,10)^CONV(1111111111111111100001110000000000100000001111011111111111111111,2,10) ) AS XXX FROM `img_hash` ORDER BY `XXX` ASC ``` 为啥这样得出来的结果是 0 呢,有的 hash 有结果,有的 hash 不行。我在写图片识别,按汉明距离计算。 @ZEOH @joyme @newtype0092 @maichael |
11
90safe OP 解决了,我也不知道为什么 hash 太长就会出现转换变 0,把 hash 砍成 4x16 段来比对就好了
|