T-SQL nie ma operatorów przesunięcia bitowego, więc trzeba by go samemu zaimplementować. Jest tu implementacja przesunięć bitowych:http ://dataeducation.com/bitmask-handling-part-4-left-shift-and-right-shift/
Musiałbyś rzucić swoją liczbę całkowitą na varbinary, użyć funkcji przesunięcia bitowego i rzucić z powrotem na liczbę całkowitą i (miejmy nadzieję) hej-presto! Oto Twój wynik, którego oczekujesz.
Wdrożenie i testowanie pozostawiono jako ćwiczenie dla czytelnika...
Edytuj — aby spróbować wyjaśnić, co umieściłem w poniższych komentarzach, wykonanie tego kodu SQL zademonstruje różne wyniki podane przez różne CAST:
SELECT -5381 AS Signed_Integer,
cast(-5381 AS varbinary) AS Binary_Representation_of_Signed_Integer,
cast(cast(-5381 AS bigint) AS varbinary) AS Binary_Representation_of_Signed_Big_Integer,
cast(cast(-5381 AS varbinary) AS bigint) AS Signed_Integer_Transposed_onto_Big_Integer,
cast(cast(cast(-5381 AS varbinary) AS bigint) AS varbinary) AS Binary_Representation_of_Signed_Integer_Trasposed_onto_Big_Integer
Wyniki:
Signed_Integer Binary_Representation_of_Signed_Integer Binary_Representation_of_Signed_Big_Integer Signed_Integer_Transposed_onto_Big_Integer Binary_Representation_of_Signed_Integer_Trasposed_onto_Big_Integer
-------------- -------------------------------------------------------------- -------------------------------------------------------------- ------------------------------------------ ------------------------------------------------------------------
-5381 0xFFFFEAFB 0xFFFFFFFFFFFFEAFB 4294961915 0x00000000FFFFEAFB