desplazamiento a la derecha sin signo '>>>' Operador en el server sql

¿Cómo escribir el operador de desplazamiento a la derecha sin signo en el server sql? La expresión es como value >>> 0

Aquí está el eg -5381 >>> 0 = 4294961915

T-SQL no tiene operadores de desplazamiento de bits, por lo que tendrá que implementar uno usted mismo. Aquí hay una implementación de cambios en bits: http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/bitmask-handling-part-4-left-shift-and-right-shift.aspx

Tendría que convertir su número integer en varbinary, usar la function de desplazamiento bit a bit y volver a integers y (con suerte) hey-prest! Ahí está el resultado que estás esperando.

La implementación y las testings se dejan como un ejercicio para el lector …

Editar – Para intentar aclarar lo que he puesto en los comentarios a continuación, la ejecución de este SQL demostrará los diferentes resultados dados por los diversos 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 

Resultados:

 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 

SQL Server no admite integers sin signo, por lo que su valor no cabe en el range de INT.

Puede get una verdadera interpretación binaria por:

 SELECT CAST(-5381 AS VARBINARY) 

Si está contento de trabajar dentro de los límites de la aritmética de punto flotante, podría hacer:

 SELECT -5381.0 + (POWER(2, 30) * 4.0) 
Intereting Posts