首页 > 解决方案 > 为什么这个按位运算是“从'int'到'byte'的缩小转换”?- 阿杜诺

问题描述

我有一个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};

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

标签: c++arduinoarduino-uno

解决方案


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

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

byte out[3] = {(byte)((getID())|B10000000), B00000001, B00000001};

这是我没有尝试过的东西,感谢引导我学习这一点的各种评论者。


推荐阅读