我有一项作业需要将 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/