我有两个char8向量。我想检查一下它们是否相等。

使用all函数时出现错误:

char8 a1 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a2 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
if (isequal(a1, a2)) return 0; // error on this line


我也尝试过:

char8 a1 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a2 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a3 = a1 - a2;
if (all(a3 == 0)) return 0; // error: can't convert from char to int

最佳答案

OpenCL的isequal()函数是only defined for the floating-point vector & scalar types,因此这就是您的第一种方法不起作用的原因。

您的第二种方法是正确的。我相信问题是您正在将char8a3)与int0)进行比较。实际上,您实际上不需要减去向量,相等应该可以正常工作(向量比较运算符对-1表示true,所以对MSB的all()测试应该可以。):

char8 a1 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a2 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
if (all(a1 == a2))
    return 0;


或者,您可以将减法的最后一行更改为:

if (all(a3 == (char8)(0))) return 0;


当您再次将char8与另一个char8(全为0)进行比较时,这也应该起作用。

09-28 09:17