氖比较[重复](Neon Comparison [duplicate])

2019-10-29 13:30发布

这个问题已经在这里有一个答案:

  • 手臂霓虹灯比较操作产生负面的 2答案

按照霓虹灯文档:

  • 如果比较是一个真正的车道,结果在车道设置为一个所有位。 如果比较是车道假,所有位都设置为零。 返回类型是无符号整数类型。

我已经写了一小段代码来检查这一点,我观察到的结果为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

Answer 1:

你显示值,如果他们签约,因为你用%d作为printf格式说明。 如果您使用%u ,你会看到相当于无符号值( 0UINT_MAX )。

需要注意的是签署岬是不是在这方面特别重要的 - 你可以把比较结果作为无符号的面具(全0或全1)或符号整型值(0或1) - 这是相同的底层位模式 - 只使用无论是有道理的在特定情况下,你正在使用的结果。



Answer 2:

这里按霓虹文件,它也提到,所有的位将设置为1。

这是在这里:

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

并用%u来代替%d。你将得到结果为:

结果: 0 4294967295 0 4294967295

你得到的结果为-1表示所有位都设置为一个。那你可以使用像逐位与和位或者运行其他的逻辑操作。



文章来源: Neon Comparison [duplicate]