gpt4 book ai didi

c - 尝试将值转换为 C 中的 2s 补码

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:35 27 4
gpt4 key购买 nike

我正在用 C 语言编写一个模拟器,我想让 constantValuable ,即 65530 (0xFFFA) 成为 5 的二进制补码变量,但我似乎不太正确。下面是我希望完成此操作的 if 语句的示例。

if(opCodeType == 4)
{
if(registers[rsVariable] == registers[rtVariable])
{
int twosVariable = ~(constantVariable) + 1;
printf("%d", twosVariable);
pc = pc + (twosVariable*4);
}
}

我似乎无法理解为什么这不起作用。

最佳答案

事实上,2 的补码是这样的,即您的数字 n(代数上是 -n)的补码是通过反射(reflect)位模式得出的n 然后将 1 添加到该数字。请注意,在 2 的补码方案中,-1 的所有位都设置为 1。

使用 ~ 反射(reflect)位模式的问题是它会导致不需要的类型提升,从而破坏结果。

一种解决方案是屏蔽~的结果,另一种是转换结果。当然,在 2 的补码平台上,您可以简单地编写 -n,注意确保 n 不是可能的最小负值。

关于c - 尝试将值转换为 C 中的 2s 补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56151521/

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