c++ - 为什么这个按位运算是“从'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};
这只是一个警告,代码工作正常(我认为),但为什么这是一个缩小转换?我试过确保几乎所有东西都是一个字节......
解决方案
所以我想我已经找到了答案,感谢一些评论者。
int
无论原始操作数是什么,按位或运算似乎都会返回一个。如果我随后将该返回值转换为 a byte
,则它不再给出错误:
byte out[3] = {(byte)((getID())|B10000000), B00000001, B00000001};
这是我没有尝试过的东西,感谢引导我学习这一点的各种评论者。
推荐阅读
- sql - 如何比较 Oracle SQL 中两个日期时间戳之间的差异?
- javascript - 从背景抓取图像源
- c++ - 模板化函数中的 shared_ptr 析构函数崩溃
- java - 我应该使用哪条路径?
- java - MangedBean 类中的任何@Autowired 注入都不起作用,它总是等于NULL?
- google-apps-script - 如何通过 API 更改 Apify 演员参数
- apache-flink - Flink窗口函数getResult未触发
- c - 在 C 中找到矩阵 3x3 或更大的行列式的问题
- c# - RichTextBox - 如何突出显示行尾?
- php - 每天在特定时间自动触发 Mysql 查询