标签: signed-integer

Java中的24到32位转换

我对一个名为OpenBCI的新物联网项目感兴趣,该项目基本上是一个用于读取和处理脑电波和其他生物数据的开源脑电图.在他们的文档中,他们声称通过空中传输的数据(通过RFDuino)发送24位数据.要将24位值转换为32位有符号整数,他们建议使用以下Java友好的处理代码:

int interpret24bitAsInt32(byte[] byteArray) {
    int newInt = (
        ((0xFF & byteArray[0]) << 16) |
        ((0xFF & byteArray[1]) << 8) |
        (0xFF & byteArray[2])
    );

    if ((newInt & 0x00800000) > 0) {
        newInt |= 0xFF000000;
    } else {
        newInt &= 0x00FFFFFF;
    }

    return newInt;
}
Run Code Online (Sandbox Code Playgroud)

我想我正在努力了解到底发生了什么.让我们来看看第一段代码:

int newInt = (
    ((0xFF & byteArray[0]) << 16) |
    ((0xFF & byteArray[1]) << 8) |
    (0xFF & byteArray[2])
);
Run Code Online (Sandbox Code Playgroud)
  • 为什么假设输入中有3个字节是安全的?
  • 0xFF价值的意义是什么?
  • left-bitshifting(<<)的目的是什么? …

java processing bit-shift bitwise-operators signed-integer

3
推荐指数
1
解决办法
1116
查看次数

C - 三个字节到一个signed int

我有一个传感器,它以三个字节输出.我这样看了:

unsigned char byte0,byte1,byte2;

byte0=readRegister(0x25);
byte1=readRegister(0x26);
byte2=readRegister(0x27);
Run Code Online (Sandbox Code Playgroud)

现在我想将这三个字节合并为一个数字:

int value;
value=byte0 + (byte1 << 8) + (byte2 << 16);
Run Code Online (Sandbox Code Playgroud)

它给出了从0到16,777,215的值,但我期望从-8,388,608到8,388,607的值.我虽然int已经通过其实施签署了.即使我尝试定义它signed int value;仍然只给我正数.所以我想我的问题是如何将int转换为它的两个补码?

谢谢!

c twos-complement signed-integer

3
推荐指数
1
解决办法
285
查看次数

to_unsigned 做什么?

有人可以解释一下 VHDL 的to_unsigned是如何工作的或者确认我的理解是正确的吗?例如:

C(30 DOWNTO 0) <= std_logic_vector (to_unsigned(-30, 31))
Run Code Online (Sandbox Code Playgroud)

这是我的理解:

  • -30 是有符号值,以位表示为 1111111111100010
  • 所有位都应反转并添加“1”以构建 C 的值
  • 0000000000011101+0000000000000001== 0000000000011111

unsigned type-conversion vhdl twos-complement signed-integer

2
推荐指数
1
解决办法
5万
查看次数

如果我们将一个加到最大的可重现整数,那么结果是否定的?

该程序要求C实现回答一个简单的问题:

如果我们检查最大的可重现整数INT_MAX <0并打印它.

printf ("%d\n", (INT_MAX) < 0);
Run Code Online (Sandbox Code Playgroud)

所以,显示输出0.因为条件变为,关系运算符返回0.

但是,如果我们添加 1到最大的可重现的整数和检查条件,请参阅以下程序.

#include <limits.h>
#include <stdio.h>

int main (void)
{
  printf ("%d\n", (INT_MAX+1) < 0);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

并显示输出 1.

为什么条件不会变

另外,如果我们将一个加到最大的可重现整数,那么结果是否定的?

c operators integer-overflow signed-integer

2
推荐指数
3
解决办法
90
查看次数

Java 中的无符号模

我正在移植一些在 uint32_t 上进行取模的 C 代码。uint32_t 按位适合 Java int,但我无法弄清楚如何在不转换为 long 的情况下对其执行模运算。这是我现在的代码:

int i = 0xffffffff;
long asUnsigned = Integer.toUnsignedLong(i);
int mod = (int) (asUnsigned % 42L);
Run Code Online (Sandbox Code Playgroud)

我可以在不转换为长整型的情况下执行此模计算吗?

java bit-manipulation modulo unsigned-integer signed-integer

0
推荐指数
1
解决办法
633
查看次数