Les fonctions bit à bit s’appliquent à toute paire de types parmi UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32 ou Float64. Certaines fonctions prennent également en charge les types String et FixedString.
Le type du résultat est un entier dont le nombre de bits est égal au nombre maximal de bits de ses arguments. Si au moins un des arguments est signé, le résultat est un nombre signé. Si un argument est un nombre à virgule flottante, il est converti en Int64.
Introduit dans : v1.1.0
Effectue une opération bit à bit ET entre deux valeurs.
Syntaxe
Arguments
Valeur renvoyée
Renvoie le résultat de l’opération bit à bit a AND b
Exemples
Exemple d’utilisation
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 │
└───┴───┴──────────────┘
Introduit dans : v20.3.0
Calcule le nombre de bits à 1 dans la représentation binaire d’un nombre.
Syntaxe
Arguments
Valeur renvoyée
Renvoie le nombre de bits égaux à un dans x. UInt8.
La fonction ne convertit pas la valeur d’entrée en un type plus grand (extension de signe).
Par exemple : bitCount(toUInt8(-1)) = 8.
Exemples
Exemple d’utilisation
SELECT bin(333), bitCount(333);
┌─bin(333)─────────┬─bitCount(333)─┐
│ 0000000101001101 │ 5 │
└──────────────────┴───────────────┘
Introduit dans : v21.1.0
Renvoie la distance de Hamming entre les représentations binaires de deux nombres.
Peut être utilisée avec les fonctions SimHash pour détecter des chaînes semi-dupliquées.
Plus la distance est faible, plus les chaînes se ressemblent.
Syntaxe
Arguments
x — Premier nombre pour calculer la distance de Hamming. (U)Int* ou Float*
y — Deuxième nombre pour calculer la distance de Hamming. (U)Int* ou Float*
Valeur renvoyée
Renvoie la distance de Hamming entre x et y UInt8
Exemples
Exemple d’utilisation
SELECT bitHammingDistance(111, 121);
┌─bitHammingDistance(111, 121)─┐
│ 3 │
└──────────────────────────────┘
Introduit dans : v1.1.0
Effectue l’opération de négation bit à bit.
Syntaxe
Arguments
Valeur renvoyée
Renvoie le résultat de ~a, c’est-à-dire a avec les bits inversés.
Exemples
Exemple d’utilisation
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 │
└──────────┴─────────────────┴────────┴───────────────┘
Introduit dans : v1.1.0
Effectue une opération OU bit à bit entre deux valeurs.
Syntaxe
Arguments
Valeur renvoyée
Renvoie le résultat de l’opération bit à bit a OR b
Exemples
Exemple d’utilisation
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 │
└───┴───┴─────────────┘
Introduit dans : v1.1.0
Fait pivoter les bits vers la gauche d’un certain nombre de positions. Les bits qui dépassent reviennent à droite.
Syntaxe
Arguments
Valeur renvoyée
Renvoie la valeur obtenue après rotation, avec un type identique à celui de a. (U)Int8/16/32/64
Exemples
Exemple d’utilisation
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 │
└────┴──────────┴───────────┴────────────────┘
Introduit dans : v1.1.0
Fait pivoter les bits vers la droite d’un certain nombre de positions. Les bits qui sortent d’un côté réapparaissent à gauche.
Syntaxe
Arguments
Valeur renvoyée
Renvoie la valeur obtenue par rotation, de même type que a. (U)Int8/16/32/64
Exemples
Exemple d’utilisation
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 │
└────┴──────────┴───────────┴────────────────┘
Introduit dans : v1.1.0
Décale la représentation binaire d’une valeur vers la gauche d’un nombre spécifié de positions de bit.
Un FixedString ou un String est traité comme une seule valeur multioctet.
Les bits d’une valeur FixedString sont perdus lorsqu’ils sont décalés hors de la valeur.
À l’inverse, une valeur String est étendue avec des octets supplémentaires, de sorte qu’aucun bit n’est perdu.
Syntaxe
Arguments
Valeur renvoyée
Renvoie la valeur décalée, d’un type identique à celui de a.
Exemples
Exemple d’utilisation avec encodage binaire
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 │
└────┴──────────┴───────────┴──────────────────────────┘
Exemple d’utilisation avec encodage hexadécimal
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 │
└─────┴────────────┴───────────┴─────────────────────────────┘
Exemple d’utilisation avec un encodage 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 │
└─────┴──────────────────────────────┴───────────┴───────────────────────────────────────────────┘
Introduite dans : v1.1.0
Décale la représentation binaire d’une valeur vers la droite d’un nombre spécifié de positions de bits.
Une FixedString ou une String est traitée comme une seule valeur multioctet.
Les bits d’une valeur FixedString sont perdus lorsqu’ils sont décalés hors de la valeur.
À l’inverse, une valeur String est étendue avec des octets supplémentaires, de sorte qu’aucun bit n’est perdu.
Syntaxe
Arguments
Valeur renvoyée
Renvoie la valeur décalée, du même type que a.
Exemples
Exemple d’utilisation avec encodage binaire
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 │
└─────┴──────────┴───────────┴────────────────────────────┘
Exemple d’utilisation avec encodage hexadécimal
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 │
└─────┴────────────┴───────────┴───────────────────────────────┘
Exemple d’utilisation avec l’encodage 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 │
└─────┴──────────────────────────────┴───────────┴─────────────────────────────────────────────────┘
Introduit dans : v22.2.0
Renvoie une sous-chaîne commençant au bit d’indice ‘offset’ et d’une longueur de ‘length’ bits.
Syntaxe
bitSlice(s, offset[, length])
Arguments
-
s — La chaîne de type String ou Fixed String à découper. String ou FixedString
-
offset —
Indique la position du bit de départ (indexé à partir de 1).
-
Valeurs positives : comptent à partir du début de la chaîne.
-
Valeurs négatives : comptent à partir de la fin de la chaîne.
(U)Int8/16/32/64 ou Float*
-
length —
Facultatif. Le nombre de bits à extraire.
-
Valeurs positives : extraient
length bits.
-
Valeurs négatives : extraient depuis l’offset jusqu’à
(string_length - |length|).
-
Omis : extrait depuis l’offset jusqu’à la fin de la chaîne.
-
Si la longueur n’est pas un multiple de 8, le résultat est complété par des zéros à droite.
(U)Int8/16/32/64 ou Float*
Valeur renvoyée
Renvoie une chaîne contenant les bits extraits, représentés sous forme de séquence binaire. Le résultat est toujours complété sur des limites d’octet (multiples de 8 bits) String
Exemples
Exemple d’utilisation
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 │
└──────────────────────────────────────────┴───────────────────────────────┘
Introduit dans : v1.1.0
Prend un nombre quelconque et le convertit en forme binaire, puis renvoie la valeur du bit à une position donnée. Le comptage s’effectue de droite à gauche, à partir de 0.
Syntaxe
Arguments
Valeur renvoyée
Renvoie la valeur du bit en position i dans la représentation binaire de a UInt8
Exemples
Exemple d’utilisation
SELECT bin(2), bitTest(2, 1);
┌─bin(2)───┬─bitTest(2, 1)─┐
│ 00000010 │ 1 │
└──────────┴───────────────┘
Introduit dans : v1.1.0
Renvoie le résultat de la conjonction logique (opérateur AND) de tous les bits situés aux positions données.
Le comptage s’effectue de droite à gauche, à partir de 0.
L’opération AND logique entre deux bits est true si et seulement si les deux bits d’entrée sont true.
Syntaxe
bitTestAll(a, index1[, index2, ... , indexN])
Arguments
Valeur renvoyée
Renvoie le résultat de la conjonction logique UInt8
Exemples
Exemple d’utilisation 1
SELECT bitTestAll(43, 0, 1, 3, 5);
┌─bin(43)──┬─bitTestAll(43, 0, 1, 3, 5)─┐
│ 00101011 │ 1 │
└──────────┴────────────────────────────┘
Exemple d’utilisation 2
SELECT bitTestAll(43, 0, 1, 3, 5, 2);
┌─bin(43)──┬─bitTestAll(4⋯1, 3, 5, 2)─┐
│ 00101011 │ 0 │
└──────────┴──────────────────────────┘
Introduit dans : v1.1.0
Renvoie le résultat de la disjonction logique (opérateur OR) appliquée à tous les bits situés aux positions données dans un nombre.
Le comptage s’effectue de droite à gauche, à partir de 0.
L’OR logique entre deux bits vaut true si au moins l’un des bits d’entrée vaut true.
Syntaxe
bitTestAny(a, index1[, index2, ... , indexN])
Arguments
Valeur renvoyée
Renvoie le résultat de la disjonction logique UInt8
Exemples
Exemple d’utilisation 1
SELECT bitTestAny(43, 0, 2);
┌─bin(43)──┬─bitTestAny(43, 0, 2)─┐
│ 00101011 │ 1 │
└──────────┴──────────────────────┘
Exemple d’utilisation 2
SELECT bitTestAny(43, 4, 2);
┌─bin(43)──┬─bitTestAny(43, 4, 2)─┐
│ 00101011 │ 0 │
└──────────┴──────────────────────┘
Introduit dans : v1.1.0
Effectue une opération OU exclusif (XOR) bit à bit entre deux valeurs.
Syntaxe
Arguments
Valeur renvoyée
Renvoie le résultat de l’opération bit à bit a XOR b.
Exemples
Exemple d’utilisation
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 │
└───┴───┴──────────────┘
Dernière modification le 25 juin 2026