我正在用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);
}
}
我似乎不明白为什么这行不通。
答案 0 :(得分:3)
实际上2的补码是您的数字Compteur
(代数为n
)的补码是通过反射 -n
的位模式而得出的,然后该数字加1。请注意,在2的补码方案中,-1的所有位都设置为1。
使用n
反映位模式的问题是,它可能导致不必要的类型提升,从而破坏结果。
一种解决方案是屏蔽~
的结果,另一种解决方案是强制转换结果。当然,在2的补码平台上,您可以简单地编写~
,注意确保-n
已经不是最小的负数。