霓虹比较

时间:2015-05-01 09:36:26

标签: c arm simd neon cortex-a

根据Neon文档:

  • 如果车道的比较为真,则该车道的结果为全部 位设置为1。如果通道的比较为假,则所有位都为 设为零。返回类型是无符号整数类型。

我已经编写了一小段代码来检查这一点,我将结果视为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

1 个答案:

答案 0 :(得分:3)

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

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