我有一个函数getID()
,它从EEPROM返回一个字节:
byte getID(){
return (byte)EEPROM.read(0x0199);
}
稍后,(在第65行(,我使用这个函数,并将其与二进制值进行位"或"运算:
byte out[3] = {getID()|B10000000, B00000001, B00000001};
Serial.write(out,3);
并且它返回从"int"到"byte"的"窄化转换":
file.ino:65:33: warning: narrowing conversion of '(int)(((unsigned char)((int)getID())) | 128)' from 'int' to 'byte {aka unsigned char}' inside { } [-Wnarrowing]
byte out[3] = {(getID())|B10000000, B00000001, B00000001};
这只是一个警告,代码运行良好(我认为(,但为什么这是一个缩小的转换?我试着确保所有东西都是一个字节。。。
所以我想我已经找到了答案,感谢一些评论者。
无论原始操作数是什么,逐位OR运算似乎都会返回int
。如果我取返回的值并将其强制转换为byte
,它将不再给出错误:
byte out[3] = {(byte)((getID())|B10000000), B00000001, B00000001};
这是我没有尝试过的,多亏了各种各样的评论者引导我学会了这一点。