根据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("startn"); for( int i = 0;i < 4; i++){ printf("%dn",rq[i]); } printf("endn");
结果:
start 0 -1 0 -1 end
您正在显示值,就像它们已签名一样,因为您使用%d
作为printf
格式说明符。 如果使用%u
您将看到等效的无符号值( 0
或UINT_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。这可以用于进一步的逻辑运算,如按位和按位或操作。
以上就是c/c++开发分享霓虹灯比较相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519569.html