C++ 什么是真(240)布尔值

C++ 什么是真(240)布尔值,c++,arrays,cuda,comparison,C++,Arrays,Cuda,Comparison,我的一个内核比较双1D数组的每个值,验证其是否大于标量。此内核填充比较结果的布尔数组 生成的布尔向量应以真或假术语提供每个元素的比较结果 但我发现该设备正在存储其他类型的真值,这使得我的代码崩溃。我能找到真的(63),真的(66),真的(240),等等。这是什么 当标量等于零时,请在两个不同的时间下载同一数组的图像 一维数组包含100个元素,只有第一个元素等于1,其余元素等于零。预期的结果当然是: {真,假,假,假,…假} 我发现另一个问题的答案是建议使用32位整数(“理想情况下,您应该使用3

我的一个内核比较双1D数组的每个值,验证其是否大于标量。此内核填充比较结果的布尔数组

生成的布尔向量应以真或假术语提供每个元素的比较结果

但我发现该设备正在存储其他类型的真值,这使得我的代码崩溃。我能找到真的(63),真的(66),真的(240),等等。这是什么

当标量等于零时,请在两个不同的时间下载同一数组的图像

一维数组包含100个元素,只有第一个元素等于1,其余元素等于零。预期的结果当然是: {真,假,假,假,…假}

我发现另一个问题的答案是建议使用32位整数(“理想情况下,您应该使用32位类型”),但我不知道如何做到这一点:

这是我的内核:

__global__ void _vecCmpGreat(bool *output, double *input1, double input2) {
    unsigned int i = blockDim.x * blockIdx.x + threadIdx.x;
    if (i < samples)
        output[i] = input1[i] > input2;
}
\uuuu全局\uuuuu无效\u向量CMPGREAT(布尔*输出,双*输入1,双输入2){
无符号整数i=blockDim.x*blockIdx.x+threadIdx.x;
如果(i<样本)
输出[i]=input1[i]>input2;
}
我的代码中计算比较结果的部分如下所示。当在布尔数组中找到从“FALSE”到“TRUE”的转换时,它应该返回到std::vector结果

unsigned int j;
for (unsigned int i = 0; i < samples - 1; i++) {
    j = samples - i - 1;
    if (r[samples - 1]) {
        result.push_back(samples - i - 1);
        break;
    }
    else {
        if (r[j] == false && r[j - 1] == true) {
        result.push_back(j);
        break;
    }
}
无符号整数j;
for(无符号整数i=0;i

任何建议都会被理解。

< P>我怀疑它们只是那些整数。在C++中,

因此,
0
的所有值都是
false
,而任何其他值都是
true
,例如
63
66
240
。这些可能就是您所发现的

尝试将它们输入为整数,或将它们与已知整数进行比较,以了解它们的真实情况


免责声明:我不熟悉CUDA。

您的问题是这一行:

        if (r[j] == false && r[j - 1] == true)
您需要的是:

        if (!r[j] && r[j - 1])
(我觉得更容易理解为:

        if (r[j - 1] && !r[j])
由于某种原因。)

在基于C的语言中,将布尔值与
false
true
进行比较几乎总是危险的。如果
r
声明为type
bool
,则该方法应该有效,否则任何非零值都将被视为“true”测试时,只有1会与
true
进行比较。事实上,与
false
进行比较不会有这个问题-但一旦与一个布尔文本进行比较,您就很容易忘记并与另一个进行比较。只需说“不”