c++ - Arduino代码: shifting bits seems to change data type from int to long

标签 c++ types arduino

在我的 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/

相关文章:

c++ - 为什么如果我注释了 "while" block ,程序就会死锁?其中的 "yield"行有何作用?

c++ - BitBlt 将位图放到启动屏幕上

postgresql - Postgres CREATE TABLE AS SELECT 列类型未知

haskell - RPC(或: How do I disambiguate function application based on TypeRep values?)

c - 字符串是发送此数据的最有效方式吗?

c++ - Arduino内存泄漏

c++ - libcurl,如何使用字符串作为密码?

c++ - 给数组一个随机数

sql - 将表列的数据类型从时间戳更改为 bigint

java - Arduino CRC计算和串口读取