Cam*_*n K 2 c++ arduino arduino-uno
getID()我有一个从 EEPROM 返回一个字节的函数:
byte getID(){
return (byte)EEPROM.read(0x0199);
}
Run Code Online (Sandbox Code Playgroud)
后来,(第 65 行),我使用此函数并将其与二进制值进行按位或:
byte out[3] = {getID()|B10000000, B00000001, B00000001};
Serial.write(out,3);
Run Code Online (Sandbox Code Playgroud)
它返回从“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};
Run Code Online (Sandbox Code Playgroud)
这只是一个警告,代码工作正常(我认为),但为什么这是一个缩小转换?我试过确保几乎所有东西都是一个字节......
所以我想我已经找到了答案,感谢一些评论者。
int无论原始操作数是什么,按位或运算似乎都会返回一个。如果我随后获取该返回值并将其转换为 a byte,则它不再给出错误:
byte out[3] = {(byte)((getID())|B10000000), B00000001, B00000001};
Run Code Online (Sandbox Code Playgroud)
这是我没有尝试过的事情,感谢各种评论者引导我了解这一点。