为什么您在下面看到的代码会给出这些结果?
void loop() {
byte test = 00000101;
Serial.print("The byte test is: ");
Serial.println(test);
int x = (int)test;
int y = (int)test<<8;
Serial.print("The int x is: ");
Serial.println(x);
Serial.print("The int shifted y is: ");
Serial.println(y);
byte tost = 10000001;
int z = test + tost;
Serial.print("The int z is: ");
Serial.println(z);
delay(1000);
}
结果:
字节测试为:65
整数 x 是:65
int 移位 y 为:16640
整数 z 为:194
如果我将测试更改为 00000001 ,它的表现会很好:
更改代码:
void loop() {
byte test = 00000001;
Serial.print("The byte test is: ");
Serial.println(test);
int x = (int)test;
int y = (int)test<<8;
Serial.print("The int x is: ");
Serial.println(x);
Serial.print("The int shifted y is: ");
Serial.println(y);
byte tost = 10000001;
int z = test + tost;
Serial.print("The int z is: ");
Serial.println(z);
delay(1000);
}
结果:
The byte test is: 1
The int x is: 1
The int shifted y is: 256
The int z is: 130
我的问题是我有两个字节要从加速度计的数据寄存器中读取。该值存储在二进制补码中,因此我想检查一下,因为wire.read
返回一个字节,有人说它是有符号的,如果我销毁这些值,则返回一个无符号的字节,因为我必须进行一些移位。
所以我想检查我是否有一个字节,我尝试将它移动并将它存储到一个 int,我得到什么值,我想测试我是否可以以某种方式将有符号字节值存储在一个字节数组中。