【问题标题】:Impliciting signed to unsigned conversion mplab xc8隐式有符号到无符号转换 mplab xc8
【发布时间】:2017-06-09 16:06:00
【问题描述】:

我明白了,这很烦人。有没有人可以看到错误?并知道如何解决?

警告:(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;
}

【问题讨论】:

  • 要正确格式化代码,请打开 sn-p,将代码粘贴到 JavaScript 部分,单击左侧窗格中的 Tidy,然后将其复制并粘贴到问题中。
  • 警告的行是什么?我没有看到任何会在此代码中产生此警告的内容。应该接近“无法重现”或提供阅读minimal reproducible example
  • 什么是SPI_SCKSPI_MISO__delay_us?您在发布的代码中的哪一行收到警告?

标签: c mplab


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-23
    • 2016-08-13
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多