SQLite中出现意外的位掩码

时间:2014-09-13 20:48:40

标签: sqlite

SQLite中有一些奇怪的情况:

第一种情况(正常),位掩码为0x04:

import sqlite3

con = sqlite3.connect("~/test.db")
cursor = con.cursor()

cursor.execute("SELECT ((525824 & 04) == 04)")
print 'Sqlite bitwise masking 04: ', cursor.fetchall()      #sqlite bitmask
# Sqlite bitwise masking 04:  [(0,)] // E.g. false

print 'Python bitwise masking 04: ', 525824 & 0x04 == 0x04  #python bitmask
# Python bitwise masking 04:  False  // E.g. false

SQLite和Python中的结果相同。没关系。

第二种情况(意外)与位掩码0x00080000:

cursor.execute("SELECT ((525824 & 00080000) == 00080000)")
print 'Sqlite bitwise masking 00080000: ', cursor.fetchall()
# Sqlite bitwise masking 00080000:  [(0,)] // E.g. False

print 'Python bitwise masking 00080000: ', 525824 & 0x00080000 == 0x00080000
# Python bitwise masking 00080000:  True  // E.g. True

为什么第二种情况的结果不同?

1 个答案:

答案 0 :(得分:1)

第一种情况有效,因为十六进制4等于十进制4.但是,在第二种情况下,十六进制0x80000不等于十进制80000。