霓虹灯比较

根据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 

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

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

这里根据霓虹文档,也提到所有位将设置为1。

那是在这里:

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

并使用%u代替%d。您将获得结果:

结果: 0 4294967295 0 4294967295

你得到的结果为-1表示所有位都设置为1。这可以用于进一步的逻辑运算,如按位和按位或操作。