为什么这个按位运算是“从'int'到'byte'的缩小转换”?- Arduino

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)

这只是一个警告,代码工作正常(我认为),但为什么这是一个缩小转换?我试过确保几乎所有东西都是一个字节......

Cam*_*n K 5

所以我想我已经找到了答案,感谢一些评论者。

int无论原始操作数是什么,按位或运算似乎都会返回一个。如果我随后获取该返回值并将其转换为 a byte,则它不再给出错误:

byte out[3] = {(byte)((getID())|B10000000), B00000001, B00000001};
Run Code Online (Sandbox Code Playgroud)

这是我没有尝试过的事情,感谢各种评论者引导我了解这一点。