霓虹灯比较

Neon Comparison

根据 Neon 文档:

我写了一小段代码来检查这个,我观察到的结果是 0 和 -1,而不是 0 和 1。有人能告诉我这背后的原因吗?

代码:

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");

结果:

start
0
-1
0
-1
end

您将值显示为已签名,因为您使用 %d 作为 printf 格式说明符。如果您使用 %u,您将看到等效的无符号值(0UINT_MAX)。

请注意,在这种情况下,带符号性并不是特别重要 - 您可以将比较结果视为无符号掩码(全 0 或全 1)或带符号整数值(0 或 -1) - 它的基础相同位模式 - 只需使用在您使用结果的特定上下文中有意义的任何内容。

根据 neon 文档,这里也提到了所有位都将设置为 1。

就在这里:

Binary 1111 1111 1111 1111 1111 1111 1111 1111 = Decimal 4294967295

并使用 %u 而不是 %d 。您将得到如下结果:

结果: 0 4294967295 0 4294967295

您得到的结果是 -1 表示所有位都设置为 1。您可以将其用于进一步的逻辑运算,例如按位与和按位或运算。