说明:
反码=原码符号位不变,其余按位取反;
补码=原码符号位不变,其余按位取反,再加1;
补码的补码就是原码;
零、正数的补码与原码相同,直接返回原数字。
补码和原码相互转换,代码实现:
/*
功能说明:原码转换为补码 或 补码转换为原码,两者操作一样,都可以用这个函数实现;
参数b:输入的补码或原码;
参数*y:输出的原码或补码,取决于b,b是原码则*y是补码,b是补码则*y是原码;
返回值:*y得到的值;
*/
int8_t bm_to_ym(int8_t b, int8_t *y)
{
int8_t t = 0;
if (0 > b) //负数
{
t = ~b;//按位取反
t++;//取反后+1
if (t&0x80)//符号位不变,上一步取反把符号位也取反了,这里是还原符号位
{
t&= 0xef;
}
else
{
t|= 0x80;
}
} else {//正数
t = b;
}
*y = t;
return t;
}