C 是否可以将无符号字符与整数进行比较和赋值

C 是否可以将无符号字符与整数进行比较和赋值,c,C,变量T、max_gray和qtd_px始终大于0,并且numeros_px是一个无符号字符向量,存储0-255之间的值。 如果可能的话,请解释原因,因为它在代码块中似乎工作正常,但对我来说没有意义,因为它们来自不同的类型:一个是无符号字符,另一个是int void filtro(unsigned char *numeros_px, int qtd_px, int T, int max_gray){ int i; for(i=0; i<qtd_px; i++){

变量
T
max_gray
qtd_px
始终大于0,并且
numeros_px
是一个
无符号字符
向量,存储0-255之间的值。 如果可能的话,请解释原因,因为它在代码块中似乎工作正常,但对我来说没有意义,因为它们来自不同的类型:一个是
无符号字符
,另一个是
int

void filtro(unsigned char *numeros_px, int qtd_px, int T, int max_gray){
    int i;
    for(i=0; i<qtd_px; i++){
        if(numeros_px[i]>= T) numeros_px[i]=max_gray;
        else numeros_px[i]=0;
    }
}
void filter(无符号字符*numeros\u px,int qtd\u px,int T,int max\u gray){
int i;
对于(i=0;i=T)numeros_px[i]=max_gray;
else numeros_px[i]=0;
}
}

是的,您可以将char分配给int,因为char是8位宽,整数是32(取决于体系结构,但在PC和32位ARMs上,它是32位宽。在某些芯片上是16位)

你不能做的是反对,因为很明显你可能会丢失数据。
*在您的代码中,这是错误的:*
numeros\u px[i]=max\u gray作为
max_grey
是32位,您将其放入一个8位变量中。如果
max\u grey
在这里,这不是问题。我在想Algol 60。如果两者都是int,它会工作(基本上如果一个是int,编译器会在比较之前隐式转换)。但是如果我的属性:numeros\u px[I]=256,numeros\u px[I]不会存储256,它会存储255,因为它会丢失一位,对吗?是的,你可以比较,但实际上存储在这里是错误的,我只是输入:)@RoniCésardeCastro:实际上在您的示例中,值
0
将被存储。如果将值转换为较小的变量,则会丢失最高位。我认为您需要“…如果
max\u grey为