c - 如何从这个字节中提取操作数?使用二进制补码

标签 c byte twos-complement

我目前有代码:

int getOperand(unsigned char b) {
    int operand = b & 0x3F;
    return operand;
}

'b' 是从字节文件中读入的 8 位二进制数。 “b”的最高 2 位是操作码,最后 6 位是操作数。我目前有这个代码设置来获取'b'的最后6位并将它们存储在变量'operand'中。我目前遇到的问题是我不知道如何将 OPERAND 提取为带符号的操作数。目前返回的数字只是无符号的。因此,如何编辑代码以使其返回带符号的数字?

最佳答案

如果我们假设您只是使用机器 native 2 的补码约定来存储适合 6 位有符号值的负字节的最后 6 位来表示负数,那么您检查符号位是否设置在您的 6位值,然后扩展符号位。

return (b & 0x20) ? b | ~0x3F : b & 0x3F;

Try it online!

关于c - 如何从这个字节中提取操作数?使用二进制补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47824237/

相关文章:

c - OpenACC肯定有例程信息错误

javascript - JS : Why is ~10 (binary, ~1010) = -11 (二进制, -1011)?

computer-science - 为什么是Two的补码?

binary - 哪些算术运算在无符号数和二进制补码有符号数上是相同的?

无法在 C(Windows)中使用 system() 更改文件名

c - 您是否特别需要 malloc 来为链表的新元素分配内存

c++ - 在 C/C++ 中使用 itoa 将整数转换为二进制字符串

java - 从字节数组写入 GIF(在 Android 中)

Java 将字符串转换为十进制(ASCII)?

unicode - UTF-8:语言使用多少字节来表示可见字符?