誰かが以下のクエリが実際に何をしているのか説明できますか?SQL Integerと '&'記号
SELECT (Convert(int, 33558529) & 4096),((Convert(int, 33558529) & 1048576))
FROM dbo.example
なぜ最初の部分が4096を返し、2番目の部分が0を返しますか?
誰かが以下のクエリが実際に何をしているのか説明できますか?SQL Integerと '&'記号
SELECT (Convert(int, 33558529) & 4096),((Convert(int, 33558529) & 1048576))
FROM dbo.example
なぜ最初の部分が4096を返し、2番目の部分が0を返しますか?
T-SQLの&
記号は、bitwise ANDです。数値のビット単位の比較に使用されます。
なぜ最初の部分は4096を返し、2番目の部分は0を返しますか?
大きな数字(33558529
)には4096ビットが含まれていますが、1048576ビットは含まれていないためです。
小さい数字を使用すると理解しやすくなり、バイナリで書き出すことができます。我々は
8 4 2 1
=======
1 0 0 1 <-- 9
1 0 0 0 <-- 8
-------
1 0 0 0 < -- result of ANDing 9 & 8 = 8
の場合になるだろう数8で上記にビット単位のANDロジックを実行した場合、あなたがチェックしている大きな数が9バイナリとして書かれ、実際に9
8 4 2 1
=======
1 0 0 1 <-- 9
されていると仮定私たちは、同じ運動をしましたが、2
8 4 2 1
=======
1 0 0 1 <-- 9
0 0 1 0 <-- 2
-------
0 0 0 0 <-- result of ANDing 9 & 2 = 0
&
と論理演算子ビット単位である - それは0に操作を行い、2つの整数値。 がAmpersand (&) operator in a SQL Server WHERE ClauseSELECT (Convert(int, 33558529) & 4096),((Convert(int, 33558529) & 1048576)) FROM dbo.example
そのは、ビット単位のデータを比較し、その結果に
チェックこのlinkを与え、あなたがチェック
33558529 - 00000010 00000000 00010000 00000001 4096 - 00000000 00000000 00010000 00000000 means 1 1048576 - 00000000 00000000 00000000 00000000
同じビット値を比較します。
参照してくださいロジックは背後にある。
&
は、2つの整数値の間でビット単位の論理AND演算を実行します。 docを参照してください。
33558529 = 10000000000001000000000001
4096 = 1000000000000 1 bit match hence 1000000000000 or 4096
1048576 = 100000000000000000000 0 bit match hence 0
ザ・論理「と」ビット演算である:ここ
バイナリに変換する整数値です。それはMSDNで文書化されています。https://msdn.microsoft.com/en-GB/library/ms174965.aspx?f=255&MSPPError=-2147217396 – PulseLab
このクエリから何を取得しますか?ここで1048576の代わりに1048577と入力すると、1が返されます。 –