这里的“&”是什么意思:
select pt.TrTp, sum(pt.TrTp)
from ProdTr pt
where TransSt & 16 <> 16 // this is the row that i don´t understand..
group by pt.TrTp
它被称为位掩码。它用于数字中的各个位具有不同含义的情况,而不是仅表示数字本身的数字(例如,如果您将年龄保存到数据库中)。
当您想象任何二进制形式的数字并想要测试该数字中的某个位是否已设置时,您可以使用二进制 AND 运算符与您要测试的数字和位一起测试它,如下所示:
if (number & 16 == 16)
在二进制中,这意味着以下内容(假设您的号码是 25):
if (00011001 & 00010000 == 00010000)
在这里你可以看到,第 5 位的数字(从下往上数)都是 1,因此得到的数字在该位有 1。由于没有其他 1,因此当两个数字在该位置都为 1 时,结果数字就是 16。
我想补充一点:将不同的含义编码到一个数据库字段中通常是一种不好的做法。很难通过索引进行索引和检索,并且取决于您的 DBMS,甚至可能完全没有索引。
这是按位的AND
。它只是检查 value 中的第 4 位是否未设置。
我会将这个表达式重写为TransSt & 16 = 0
这是一个按位与。
& 按位运算符在两个表达式之间执行按位逻辑与,取两个表达式的每个对应位。当且仅当输入表达式中的两个位(对于正在解析的当前位)的值都为 1 时,结果中的位设置为 1;否则,结果中的位设置为 0。
来自http://msdn.microsoft.com/en-us/library/ms174965.aspx
在这种情况下,它与标志一起使用,其中多个值存储在一个字段中,然后按位与运算用于检查特定状态 - 或者在这种特殊情况下 - 检查该字段是否不包含指定的状态。
它是按位与。请参阅此MSDN 文章。
这是一个按位与运算符。
按位运算在一个或多个位模式或二进制数字的各个位级别上进行操作。它是处理器直接支持的快速、原始的操作,用于操作值以进行比较和计算。在简单的低成本处理器上,按位运算通常比除法快得多,比乘法快几倍,有时比加法快得多。尽管现代处理器由于其较长的指令流水线和其他架构设计选择,通常执行加法和乘法运算的速度与按位运算一样快,但由于资源使用减少,按位运算通常使用较少的功率/性能。