隐式有符号到无符号转换 mplab xc8

Impliciting signed to unsigned conversion mplab xc8

我收到了,这很烦人。有没有人可以看到错误?并知道如何修复它?

warning: (373) implicit signed to unsigned conversion

unsigned char read_soft_SPI(void) {
  unsigned char value = 0;
  unsigned char i = 0;
  unsigned char x = 0x80;

  SPI_SCK = 0;
  __delay_us(1);

  for (i = 0; i < 8; i++) {
    __delay_us(1);
    if (SPI_MISO == 1) {
      value = value | (x >> i);
    }
    SPI_SCK = 1;
    __delay_us(1);
    SPI_SCK = 0;

  }
  return value;
}

我刚刚有类似的 "problems"。 我已经解决如下: 值 = (无符号字符) (值 | (x >> i)); 我相信基本上编译器不知道你的操作结果会保持在8位大小并且没有符号,所以它要求你指定它。

发生在我​​身上的奇怪事情是解决方案对于 8 位到 16 位操作还不够好,如下所示:

unsigned int mul;
unsigned char a,b;
mul=(unsigned int) ((a+CONSTANT_VALUE*2/3)*b);