Может ли кто-нибудь объяснить, что делает этот запрос?SQL Integer и знак '&'
SELECT (Convert(int, 33558529) & 4096),((Convert(int, 33558529) & 1048576))
FROM dbo.example
Почему первая часть возвращает 4096, а вторая часть возвращает 0?
Может ли кто-нибудь объяснить, что делает этот запрос?SQL Integer и знак '&'
SELECT (Convert(int, 33558529) & 4096),((Convert(int, 33558529) & 1048576))
FROM dbo.example
Почему первая часть возвращает 4096, а вторая часть возвращает 0?
&
знак T-SQL - bitwise AND. Он используется для побитового сравнения чисел.
Почему первая часть возвращает 4096, а вторая часть возвращает 0?
Потому что большое количество (33558529
) содержит бит 4096 бит, но не содержит бит 1048576.
Мне легче понять, когда вы используете меньшие числа и записываете его в двоичном формате. Предположим, что большое число вы проверяете на самом деле 9, записывается в виде двоичного 9
8 4 2 1
=======
1 0 0 1 <-- 9
Если мы должны были выполнить побитовое И логику выше с номером 8 мы получим
8 4 2 1
=======
1 0 0 1 <-- 9
1 0 0 0 <-- 8
-------
1 0 0 0 < -- result of ANDing 9 & 8 = 8
If мы сделали то же самое упражнение, но с 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
&
является побитовое логическое и оператор - Он выполняет операцию 2 целых значения.
Пожалуйста, обратитесь: Ampersand (&) operator in a SQL Server WHERE Clause
SELECT
(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
То же вы проверить логика позади.
&
выполняет побитовую логическую операцию И между двумя целыми значениями. См. 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
что вы хотите получить от этого запроса? Здесь, если вы введете 1048577 вместо 1048576, то он вернет 1. –