SQLite中出现意外的位掩码结果

SQLite中出现意外的位掩码结果,sqlite,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 bitw

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

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

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

您缺少SQLite代码中的
0x
前缀。cursor.execute(“SELECT(525824&0x00080000)=0x00080000”)不起作用。我怎么修?明白了。使用524288=int('0x00080000',16)代替十六进制更简单。