• 请不要在回答技术问题时复制粘贴 AI 生成的内容
90safe
V2EX  ›  程序员

为什么用 XOR 运算会得出非 1 和 0 的结果

  •  
  •   90safe · Jun 22, 2018 · 3236 views
    This topic created in 2907 days ago, the information mentioned may be changed or developed.
    SELECT ( 1000000000000010 ^ 1111111111111111 ) AS XXX FROM `hash` ORDER BY `XXX` ASC
    

    这样的 SQL 语句运行会变成 140677691470285 这样的结果,正确结果难道不是按位异或比对吗?

    11 replies    2018-06-22 10:01:47 +08:00
    Hieast
        1
    Hieast  
       Jun 22, 2018 via Android
    你这不是二进制吧,计组的题没刷够
    90safe
        2
    90safe  
    OP
       Jun 22, 2018
    如果非要说 XOR 不能运行在二进制上,那么转换为十进制的话。
    ```
    SELECT ( 32770 ^ 65535 ) AS XXX FROM `hash` ORDER BY `XXX` ASC
    ```
    得出来的结果是__32765__一点也不科学!
    ZEOH
        3
    ZEOH  
       Jun 22, 2018   ❤️ 3
    1000000000000010D = 11100011010111111010100100110001101000000000001010B
    1111111111111111D = 11111100101000110010110111000101010111000111000111B
    异或运算结果:00011111111111001000010011110100111111000111001101B = 140677691470285D
    wwqgtxx
        4
    wwqgtxx  
       Jun 22, 2018
    一楼说的是你的 1000000000000010 不是二进制而是十进制。。。
    maichael
        5
    maichael  
       Jun 22, 2018
    结果是对的,只是以 10 进制的形式显示而已。
    90safe
        6
    90safe  
    OP
       Jun 22, 2018
    @ZEOH 3Q
    joyme
        7
    joyme  
       Jun 22, 2018
    php> $a = 32770 ^ 65535

    php> echo $a
    32765
    php> printf("%b", 32770)
    1000000000000010
    php> printf("%b", 65535)
    1111111111111111
    php> printf("%b", 32765)
    111111111111101
    newtype0092
        8
    newtype0092  
       Jun 22, 2018
    select conv(conv(1000000000000010, 2, 10) ^ conv(1111111111111111, 2, 10), 10, 2);
    newtype0092
        9
    newtype0092  
       Jun 22, 2018
    二进制十进制转换链接一下
    90safe
        10
    90safe  
    OP
       Jun 22, 2018
    ```
    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
    90safe
        11
    90safe  
    OP
       Jun 22, 2018
    解决了,我也不知道为什么 hash 太长就会出现转换变 0,把 hash 砍成 4x16 段来比对就好了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1565 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 91ms · UTC 16:23 · PVG 00:23 · LAX 09:23 · JFK 12:23
    ♥ Do have faith in what you're doing.