我有两个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,因此这就是您的第一种方法不起作用的原因。
您的第二种方法是正确的。我相信问题是您正在将char8
(a3
)与int
(0
)进行比较。实际上,您实际上不需要减去向量,相等应该可以正常工作(向量比较运算符对-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)进行比较时,这也应该起作用。