Dans l'extrait C suivant, qui vérifie si les deux premiers bits d'une séquence de 16 bits sont définis:
bool is_pointer(unsigned short int sequence) {
return (sequence >> 14) == 3;
}
Clang-Tidy de CLion me donne l'avertissement "Utilisation d'un opérande entier signé avec un opérateur binaire binaire", et je ne comprends pas pourquoi. Est unsigned short
pas assez signé?
Le code pour cette vérification semble s'inquiéter si l'un des opérandes de l'opérateur au niveau du bit est signé. Ce n'est pas sequence
qui cause l'avertissement, mais 14
, et vous pouvez résoudre le problème en faisant 14
non signé en ajoutant un u
à la fin.
(sequence >> 14u)
Je pense que la promotion de nombre entier provoque ici l'avertissement. Les opérandes plus petits qu'un int sont élargis en entier pour l'expression arithmétique, qui est signée. Donc, votre code est effectivement return ( (int)sequence >> 14)==3;
, ce qui conduit à l'avertissement. Essayez return ( (unsigned)sequence >> 14)==3;
ou return (sequence & 0xC000)==0xC000;
.