在我的 Arduino 上,以下代码产生我不明白的输出:
void setup(){
Serial.begin(9600);
int a = 250;
Serial.println(a, BIN);
a = a << 8;
Serial.println(a, BIN);
a = a >> 8;
Serial.println(a, BIN);
}
void loop(){}
输出为:
11111010
11111111111111111111101000000000
11111111111111111111111111111010
我确实理解第一行:前导零不会打印到串行终端。然而,移位后,a
的数据类型似乎已从 int 更改为 long(打印 32 位)。预期的行为是位被左移,并且从 int 的 16 位“移出”的位被简单地丢弃。向后移位不会再次将“32 位”变量变为“16 位”。
移动 7 个或更少的位置不会显示此效果。
我可能应该说我没有使用 Arduino IDE,而是使用 https://github.com/sudar/Arduino-Makefile 中的 Makefile。 .
这是怎么回事?我几乎希望这是“正常的”,但我不明白。或者是打印例程中的某些内容只是将 16 个“1”添加到输出中?
恩诺
最佳答案
除了其他答案之外,整数可能会存储在 16 位或 32 位中,具体取决于您拥有的 arduino。
关于c++ - Arduino代码: shifting bits seems to change data type from int to long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36044770/