c - 如何在C中找到整数的第n位

标签 c binary twos-complement

我有一项作业需要将 8 位符号大小数转换为二进制补码,然后将这两个数相加。对于如何执行此操作,我有一个相对好的想法,但是我无法弄清楚如何找到整数的第八位,以便我可以告诉数字有什么符号。

总体思路是,如果符号位为 0,则只返回数字,因为它已经是二进制补码,如果它是一个,那么我想在使用 ~ 运算符反转所有位之前将其设置为 0,然后添加1.

提前致谢

最佳答案

您可以通过创建仅设置了该位的掩码并使用逻辑与查看结果是否非零来检查是否设置了高位。

一旦知道设置了高位,就可以通过翻转所有位并加一来转换为二进制补码。

uint8_t x = (some value)
if (x & (1 << 7)) {
    printf("sign bit set\n");
    x = (uint8_t)((~(x & (0x7F))) & 0xFF) + 1;
    printf("converted value: %02X\n", x);
}

然后你就可以正常的把这个号码加到任何其他号码上了。

关于c - 如何在C中找到整数的第n位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35844809/

相关文章:

c - 循环结构时报告段错误

mysql - 如何在mysql数据库中查找相似的二进制字符串?

c++ - 二进制补码形式

java - 如何以编程方式在 Java 中获取二进制数的 2 的补码

c - 如何将c中表中的值相乘

c - 读/写 errno 或堆栈变量会导致段错误。为什么?

python/numpy 生成二进制文件以供 C 读取

ios - 如何读取录制的音频(二进制)文件以在 iOS 中上传

Java 二进制补码转整数

c - 如何在循环中使用管道,我的正确吗?