隐式有符号到无符号转换 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);
我收到了,这很烦人。有没有人可以看到错误?并知道如何修复它?
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);