gpt4 book ai didi

c - 移动字节并将剩余值转换为 int(对二进制补码感兴趣)

转载 作者:太空宇宙 更新时间:2023-11-04 06:02:58 24 4
gpt4 key购买 nike

为什么您在下面看到的代码会给出这些结果?

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);
}

结果:

The byte test is: 65

The int x is: 65

The int shifted y is: 16640

The int z is: 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

我的问题是我有两个字节要从加速度计的数据寄存器中读取。该值存储在 two's complement 中所以我想检查一下,因为 wire.read 返回一个字节,有些人说这是有符号的,有些人说如果我破坏了这些值则没有符号,因为我必须做一些移位。

所以我想检查我是否有一个字节,我尝试将它移位并将它存储到一个 int,我得到什么值,我想测试我是否可以以某种方式将带符号的字节值存储在字节数组中。

最佳答案

仅仅因为你写了一个“看起来是二进制”的数字,因为它有很多 1 和 0 并且是 8 位宽,并不能神奇地使它成为二进制文字。你会如何期望:

byte x = 100;

byte x = 100;

要知道该值应该是 10010(一百还是 1002(四)?

事实上,C(和 C++)甚至没有内置的二进制文字:以 0 开头的数字文字被解释为 octal,基数为 8。

关于c - 移动字节并将剩余值转换为 int(对二进制补码感兴趣),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15922714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com