尝试在C中将值转换为2s补码

时间:2019-05-15 14:16:49

标签: c

我正在用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);
                }
            } 

我似乎不明白为什么这行不通。

1 个答案:

答案 0 :(得分:3)

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

使用n反映位模式的问题是,它可能导致不必要的类型提升,从而破坏结果。

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