Selon la documentation Neon:
J’ai écrit un petit morceau de code pour vérifier ceci et j’ai observé le résultat comme étant 0 et -1 au lieu de 0 et 1. Quelqu’un peut-il me dire la raison derrière cela?
Code:
float c1[4] = {12.0f,12.0f,12.0f,12.0f}; float c2[4] = {13.0f,12.0f,9.0f,12.0f}; float32x4_t t1,t2; uint32x4_t rq; t1 = vld1q_f32(c1); t2 = vld1q_f32(c2); rq = vceqq_f32(t1,t2); printf("start\n"); for( int i = 0;i < 4; i++){ printf("%d\n",rq[i]); } printf("end\n");
Résultat:
start 0 -1 0 -1 end
Vous affichez les valeurs comme si elles étaient signées, car vous utilisez %d
comme printf
format printf
. Si vous utilisez %u
vous verrez les valeurs non signées équivalentes ( 0
ou UINT_MAX
).
Notez que la signature n’est pas particulièrement importante dans ce contexte – vous pouvez traiter les résultats de la comparaison comme des masques non signés (tous les 0 ou tous les 1) ou comme des valeurs entières signées (0 ou -1). Il s’agit du même motif de bits sous-jacent. tout ce qui a du sens dans le contexte particulier où vous utilisez le résultat.
Ici, comme dans le document néon, il est également mentionné car tous les bits seront mis à un.
C’est ici:
Binary 1111 1111 1111 1111 1111 1111 1111 1111 = Decimal 4294967295
Et utilisez% u au lieu de% d .Vous obtiendrez le résultat suivant:
Résultat: 0 4294967295 0 4294967295
Vous obtenez un résultat égal à -1, ce qui signifie que tous les bits sont réglés sur un. Vous pouvez l’utiliser pour d’autres opérations logiques, comme au niveau des bits et des bits ou des opérations.