que fait cette macro C ++?
Question
Ceci est pour MSVC
#define Get64B(hi, lo) ((((__int64)(hi)) << 32) | (unsigned int)(lo))
Plus précisément, quel est le rôle de "l'opérateur < <" ?
Merci de votre aide
La solution
< < est l'opérateur de l'équipe de gauche. Cette macro est destinée à créer une valeur de 64 bits à partir de deux valeurs de 32 bits, en utilisant le premier argument comme 32 bits supérieurs et le second argument comme les 32 bits inférieurs de la nouvelle valeur.
Autres conseils
Il faut deux entiers de 32 bits et renvoie un entier de 64 bits, le premier paramètre étant les 32 bits hauts et le second les 32 bits bas.
< < est l'opérateur de l'équipe de gauche. Il prend les 32 bits hauts, les décale, puis les OR qui résultent avec les bits bas.
opérateur < < est un opérateur de décalage à gauche binaire. Cela décale la variable int64 de 32 bits.
AakashM est correct. Il peut être plus facile de comprendre l’écriture en tant que méthode
__int64 Get64B(__int32 hi, __int32 lo) {
__int64 combined = hi;
combined = combined << 32; // Shift the value 32 bits left. Combined
// now holds all of hi on the left 32 bits
combined = combined | lo; // Low 32 bits now equal to lo
return combined;
}
Ce bit décale la valeur hi de 32 bits vers la gauche.
C'est l'opérateur de décalage à gauche, et sa signification standard (pour les types de nombres) est de décaler les bits vers la gauche
int a = 1;
int b = a << 3; // b is now 1000 binary, 8 decimal
Le code crée un nombre de 64 bits sur deux nombres de 32 bits.
Cela retourne un int de 64 bits utilisant deux int de 32 bits, l'un est utilisé comme octets d'ordre de hi et le second comme octets d'ordre inférieur.
salut < < 32 convertit l’entier en octets de poids fort de l’int 64 bits. Exemple:
Get64B (11111111111111110000000000000000, 0000000000000000111111111111111)
renvoie 1111111111111111000000000000000000000000000000001111111111111111111
Parce que 11111111111111110000000000000000 < < 32 déclarations
1111111111111111000000000000000000000000000000000000000000000000
Retourne un entier 64 bits de deux entiers 8,16,32 ou 64 bits. C'est plus sûr que: hi & Lt; & Lt; 32 | lo