霓虹灯比较
Neon Comparison
根据 Neon 文档:
- 如果一条泳道的比较结果为真,则该泳道的结果为全部
位设置为一。如果通道的比较结果为假,则所有位都是
设置为零。 return 类型是无符号整数类型。
我写了一小段代码来检查这个,我观察到的结果是 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
,您将看到等效的无符号值(0
或 UINT_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。您可以将其用于进一步的逻辑运算,例如按位与和按位或运算。
根据 Neon 文档:
- 如果一条泳道的比较结果为真,则该泳道的结果为全部 位设置为一。如果通道的比较结果为假,则所有位都是 设置为零。 return 类型是无符号整数类型。
我写了一小段代码来检查这个,我观察到的结果是 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
,您将看到等效的无符号值(0
或 UINT_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。您可以将其用于进一步的逻辑运算,例如按位与和按位或运算。