Las funciones de bits funcionan con cualquier par de tipos entre UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32 o Float64. Algunas funciones admiten los tipos String y FixedString.
El tipo de resultado es un entero cuyo número de bits es igual al número máximo de bits de sus argumentos. Si al menos uno de los argumentos es de tipo con signo, el resultado será un número con signo. Si un argumento es un número de coma flotante, se convierte a Int64.
Introducido en: v1.1.0
Realiza una operación AND bit a bit entre dos valores.
Sintaxis
Argumentos
Valor devuelto
Devuelve el resultado de la operación bit a bit a AND b
Ejemplos
Ejemplo de uso
CREATE TABLE bits
(
`a` UInt8,
`b` UInt8
)
ENGINE = Memory;
INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1);
SELECT
a,
b,
bitAnd(a, b)
FROM bits
┌─a─┬─b─┬─bitAnd(a, b)─┐
│ 0 │ 0 │ 0 │
│ 0 │ 1 │ 0 │
│ 1 │ 0 │ 0 │
│ 1 │ 1 │ 1 │
└───┴───┴──────────────┘
Introducido en: v20.3.0
Calcula la cantidad de bits con valor uno en la representación binaria de un número.
Sintaxis
Argumentos
Valor devuelto
Devuelve el número de bits establecidos en uno en x. UInt8.
La función no convierte el valor de entrada a un tipo de mayor tamaño (extensión de signo).
Por ejemplo: bitCount(toUInt8(-1)) = 8.
Ejemplos
Ejemplo de uso
SELECT bin(333), bitCount(333);
┌─bin(333)─────────┬─bitCount(333)─┐
│ 0000000101001101 │ 5 │
└──────────────────┴───────────────┘
Introducido en: v21.1.0
Devuelve la distancia de Hamming entre las representaciones en bits de dos números.
Puede utilizarse con las funciones SimHash para detectar cadenas casi duplicadas.
Cuanto menor sea la distancia, más similares serán las cadenas.
Sintaxis
Argumentos
x — Primer número para calcular la distancia de Hamming. (U)Int* o Float*
y — Segundo número para calcular la distancia de Hamming. (U)Int* o Float*
Valor devuelto
Devuelve la distancia de Hamming entre x e y UInt8
Ejemplos
Ejemplo de uso
SELECT bitHammingDistance(111, 121);
┌─bitHammingDistance(111, 121)─┐
│ 3 │
└──────────────────────────────┘
Introducido en: v1.1.0
Realiza la operación NOT bit a bit.
Sintaxis
Argumentos
Valor devuelto
Devuelve el resultado de ~a, es decir, a con los bits invertidos.
Ejemplos
Ejemplo de uso
SELECT
CAST('5', 'UInt8') AS original,
bin(original) AS original_binary,
bitNot(original) AS result,
bin(bitNot(original)) AS result_binary;
┌─original─┬─original_binary─┬─result─┬─result_binary─┐
│ 5 │ 00000101 │ 250 │ 11111010 │
└──────────┴─────────────────┴────────┴───────────────┘
Introducido en: v1.1.0
Realiza una operación OR bit a bit entre dos valores.
Sintaxis
Argumentos
Valor devuelto
Devuelve el resultado de la operación bit a bit a OR b
Ejemplos
Ejemplo de uso
CREATE TABLE bits
(
`a` UInt8,
`b` UInt8
)
ENGINE = Memory;
INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1);
SELECT
a,
b,
bitOr(a, b)
FROM bits;
┌─a─┬─b─┬─bitOr(a, b)─┐
│ 0 │ 0 │ 0 │
│ 0 │ 1 │ 1 │
│ 1 │ 0 │ 1 │
│ 1 │ 1 │ 1 │
└───┴───┴─────────────┘
Introducido en: v1.1.0
Rota los bits hacia la izquierda un número determinado de posiciones. Los bits que se desplazan fuera reaparecen por la derecha.
Sintaxis
Argumentos
Valor devuelto
Devuelve el valor rotado con el mismo tipo que a. (U)Int8/16/32/64
Ejemplos
Ejemplo de uso
SELECT 99 AS a, bin(a), bitRotateLeft(a, 2) AS a_rotated, bin(a_rotated);
┌──a─┬─bin(a)───┬─a_rotated─┬─bin(a_rotated)─┐
│ 99 │ 01100011 │ 141 │ 10001101 │
└────┴──────────┴───────────┴────────────────┘
Introducido en: v1.1.0
Rota los bits a la derecha un número determinado de posiciones. Los bits que se desplazan fuera vuelven al lado izquierdo.
Sintaxis
Argumentos
Valor devuelto
Devuelve el valor rotado, con el mismo tipo que a. (U)Int8/16/32/64
Ejemplos
Ejemplo de uso
SELECT 99 AS a, bin(a), bitRotateRight(a, 2) AS a_rotated, bin(a_rotated);
┌──a─┬─bin(a)───┬─a_rotated─┬─bin(a_rotated)─┐
│ 99 │ 01100011 │ 216 │ 11011000 │
└────┴──────────┴───────────┴────────────────┘
Introducido en: v1.1.0
Desplaza la representación binaria de un valor hacia la izquierda el número de posiciones de bit especificado.
Un FixedString o un String se trata como un único valor multibyte.
Los bits de un valor FixedString se pierden al desplazarse fuera.
Por el contrario, un valor String se amplía con bytes adicionales, por lo que no se pierde ningún bit.
Sintaxis
Argumentos
Valor devuelto
Devuelve el valor desplazado con el mismo tipo que a.
Ejemplos
Ejemplo de uso con codificación binaria
SELECT 99 AS a, bin(a), bitShiftLeft(a, 2) AS a_shifted, bin(a_shifted);
┌──a─┬─bin(99)──┬─a_shifted─┬─bin(bitShiftLeft(99, 2))─┐
│ 99 │ 01100011 │ 140 │ 10001100 │
└────┴──────────┴───────────┴──────────────────────────┘
Ejemplo de uso con codificación hexadecimal
SELECT 'abc' AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted);
┌─a───┬─hex('abc')─┬─a_shifted─┬─hex(bitShiftLeft('abc', 4))─┐
│ abc │ 616263 │ &0 │ 06162630 │
└─────┴────────────┴───────────┴─────────────────────────────┘
Ejemplo de uso con codificación Fixed String
SELECT toFixedString('abc', 3) AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted);
┌─a───┬─hex(toFixedString('abc', 3))─┬─a_shifted─┬─hex(bitShiftLeft(toFixedString('abc', 3), 4))─┐
│ abc │ 616263 │ &0 │ 162630 │
└─────┴──────────────────────────────┴───────────┴───────────────────────────────────────────────┘
Introducido en: v1.1.0
Desplaza la representación binaria de un valor hacia la derecha el número especificado de posiciones de bit.
Un FixedString o un String se trata como un único valor multibyte.
Los bits de un valor FixedString se pierden al desplazarse fuera.
En cambio, un valor String se extiende con bytes adicionales, por lo que no se pierde ningún bit.
Sintaxis
Argumentos
Valor devuelto
Devuelve el valor desplazado con el mismo tipo que a.
Ejemplos
Ejemplo de uso con codificación binaria
SELECT 101 AS a, bin(a), bitShiftRight(a, 2) AS a_shifted, bin(a_shifted);
┌───a─┬─bin(101)─┬─a_shifted─┬─bin(bitShiftRight(101, 2))─┐
│ 101 │ 01100101 │ 25 │ 00011001 │
└─────┴──────────┴───────────┴────────────────────────────┘
Ejemplo de uso con codificación hexadecimal
SELECT 'abc' AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted);
┌─a───┬─hex('abc')─┬─a_shifted─┬─hex(bitShiftRight('abc', 12))─┐
│ abc │ 616263 │ │ 0616 │
└─────┴────────────┴───────────┴───────────────────────────────┘
Ejemplo de uso con codificación de Fixed String
SELECT toFixedString('abc', 3) AS a, hex(a), bitShiftRight(a, 12) AS a_shifted, hex(a_shifted);
┌─a───┬─hex(toFixedString('abc', 3))─┬─a_shifted─┬─hex(bitShiftRight(toFixedString('abc', 3), 12))─┐
│ abc │ 616263 │ │ 000616 │
└─────┴──────────────────────────────┴───────────┴─────────────────────────────────────────────────┘
Introducido en: v22.2.0
Devuelve una subcadena que comienza en el bit del índice ‘offset’ y tiene una longitud de ‘length’ bits.
Sintaxis
bitSlice(s, offset[, length])
Argumentos
-
s — La String o Fixed String que se va a dividir. String o FixedString
-
offset —
Devuelve la posición inicial del bit (indexación basada en 1).
-
Valores positivos: cuentan desde el principio de la cadena.
-
Valores negativos: cuentan desde el final de la cadena.
(U)Int8/16/32/64 o Float*
-
length —
Opcional. El número de bits que se van a extraer.
-
Valores positivos: extraen
length bits.
-
Valores negativos: extraen desde el desplazamiento hasta
(string_length - |length|).
-
Si se omite: extrae desde el desplazamiento hasta el final de la cadena.
-
Si
length no es un múltiplo de 8, el resultado se rellena con ceros a la derecha.
(U)Int8/16/32/64 o Float*
Valor devuelto
Devuelve una cadena que contiene los bits extraídos, representados como una secuencia binaria. El resultado siempre se rellena hasta los límites de byte (múltiplos de 8 bits) String
Ejemplos
Ejemplo de uso
SELECT bin('Hello'), bin(bitSlice('Hello', 1, 8));
SELECT bin('Hello'), bin(bitSlice('Hello', 1, 2));
SELECT bin('Hello'), bin(bitSlice('Hello', 1, 9));
SELECT bin('Hello'), bin(bitSlice('Hello', -4, 8));
┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 8))─┐
│ 0100100001100101011011000110110001101111 │ 01001000 │
└──────────────────────────────────────────┴──────────────────────────────┘
┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 2))─┐
│ 0100100001100101011011000110110001101111 │ 01000000 │
└──────────────────────────────────────────┴──────────────────────────────┘
┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 9))─┐
│ 0100100001100101011011000110110001101111 │ 0100100000000000 │
└──────────────────────────────────────────┴──────────────────────────────┘
┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', -4, 8))─┐
│ 0100100001100101011011000110110001101111 │ 11110000 │
└──────────────────────────────────────────┴───────────────────────────────┘
Introducido en: v1.1.0
Toma cualquier número y lo convierte a binario; luego devuelve el valor del bit en una posición especificada. El conteo se realiza de derecha a izquierda, empezando en 0.
Sintaxis
Argumentos
Valor devuelto
Devuelve el valor del bit situado en la posición i en la representación binaria de a UInt8
Ejemplos
Ejemplo de uso
SELECT bin(2), bitTest(2, 1);
┌─bin(2)───┬─bitTest(2, 1)─┐
│ 00000010 │ 1 │
└──────────┴───────────────┘
Introducido en: v1.1.0
Devuelve el resultado de la conjunción lógica (operador AND) de todos los bits en las posiciones especificadas.
Cuenta de derecha a izquierda, empezando en 0.
El AND lógico entre dos bits es verdadero si y solo si ambos bits de entrada son verdaderos.
Sintaxis
bitTestAll(a, index1[, index2, ... , indexN])
Argumentos
Valor devuelto
Devuelve el resultado de la conjunción lógica UInt8
Ejemplos
Ejemplo de uso 1
SELECT bitTestAll(43, 0, 1, 3, 5);
┌─bin(43)──┬─bitTestAll(43, 0, 1, 3, 5)─┐
│ 00101011 │ 1 │
└──────────┴────────────────────────────┘
Ejemplo de uso 2
SELECT bitTestAll(43, 0, 1, 3, 5, 2);
┌─bin(43)──┬─bitTestAll(4⋯1, 3, 5, 2)─┐
│ 00101011 │ 0 │
└──────────┴──────────────────────────┘
Introducido en: v1.1.0
Devuelve el resultado de la disyunción lógica (operador OR) de todos los bits situados en las posiciones indicadas de un número.
Se cuenta de derecha a izquierda, comenzando en 0.
El OR lógico entre dos bits es verdadero si al menos uno de los bits de entrada es verdadero.
Sintaxis
bitTestAny(a, index1[, index2, ... , indexN])
Argumentos
Valor devuelto
Devuelve el resultado de la disyunción lógica UInt8
Ejemplos
Ejemplo de uso 1
SELECT bitTestAny(43, 0, 2);
┌─bin(43)──┬─bitTestAny(43, 0, 2)─┐
│ 00101011 │ 1 │
└──────────┴──────────────────────┘
Ejemplo de uso 2
SELECT bitTestAny(43, 4, 2);
┌─bin(43)──┬─bitTestAny(43, 4, 2)─┐
│ 00101011 │ 0 │
└──────────┴──────────────────────┘
Introducido en: v1.1.0
Realiza una operación de o exclusiva bit a bit (XOR) entre dos valores.
Sintaxis
Argumentos
Valor devuelto
Devuelve el resultado de la operación bit a bit a XOR b
Ejemplos
Ejemplo de uso
CREATE TABLE bits
(
`a` UInt8,
`b` UInt8
)
ENGINE = Memory;
INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1);
SELECT
a,
b,
bitXor(a, b)
FROM bits;
┌─a─┬─b─┬─bitXor(a, b)─┐
│ 0 │ 0 │ 0 │
│ 0 │ 1 │ 1 │
│ 1 │ 0 │ 1 │
│ 1 │ 1 │ 0 │
└───┴───┴──────────────┘
Última modificación el 10 de junio de 2026