在我的项目中,32和64位的产品软件架构分别存储在表21和22中,用于各种产品。
我遇到了一个SQL,其中' where '子句提到架构22
'architecture & 2 = 2';
和 for architecture 21
'architecture & 2 != 2';
我无法理解上述语句的重要性以及2 = 2在此SQL中的作用?
答案 0 :(得分:2)
通常x & m = m
会检查掩码m
的所有位是否都设置为x
的值。
22的二进制表示是10110 2 ,而21的二进制表示是10101 2 。当你将x & 2
掩码应用到22时,你会得到2,因为右边的两位,第二位被设置为22,因此architecture & 2 = 2
将是true
。
当您将相同的测试应用于21时,您将返回零,因为右侧的第二位未设置,因此architecture & 2 != 2
将为true
。
答案 1 :(得分:1)
答案 2 :(得分:1)
架构字段应存储按位求和。
如果architecture = 22
的值表示architecture = 2+4+16
如果architecture is 21
的值表示architecture = 1+4+16
对于按位求和,考虑值的范围:1,2,4,8,16,32,64 ...
所以,表达式
'architecture & 2 = 2';
是检查数字2是否存储在架构字段中。
如果architecture is 21
结果为0.那么,是假的。
如果architecture = 22
结果是2.那么,是真的。