Неявное преобразование подписанного в неподписанное mplab xc8

Я получаю это, и это раздражает. есть ли кто-нибудь может увидеть ошибку? и знаете как это исправить?

предупреждение: (373) неявное преобразование знака в беззнаковое

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;
}

person Oguzhanreis    schedule 08.06.2017    source источник
comment
для правильного форматирования кода откройте фрагмент, вставьте свой код в раздел JavaScript, нажмите Tidy на левой панели, а затем скопируйте его и вставьте в вопрос.   -  person Sagar V    schedule 08.06.2017
comment
Какова строка предупреждения? Я не вижу ничего, что могло бы вызвать это предупреждение в этом коде. Должно быть близко, так как не может воспроизвести или предоставить прочитанный минимальный воспроизводимый пример.   -  person Stargateur    schedule 08.06.2017
comment
Что такое SPI_SCK, SPI_MISO и __delay_us? В какой именно строке кода, который вы разместили, вы получаете предупреждение?   -  person Jabberwocky    schedule 08.06.2017


Ответы (1)


У меня сейчас похожие "проблемы". Я решил следующим образом: value = (unsigned char) (value | (x >> i)); Я полагаю, что в основном компилятор не знает, что результат вашей операции останется внутри 8-битного размера и без знака, поэтому он просит вас указать это.

Странная вещь, которая происходит со мной, заключается в том, что решение еще недостаточно хорошо для работы от 8 до 16 бит, как это:

unsigned int mul;
unsigned char a,b;
mul=(unsigned int) ((a+CONSTANT_VALUE*2/3)*b);
person Emanuele Castagnini    schedule 09.06.2017