补码还原 C语言

来源:百度知道 编辑:UC知道 时间:2024/06/04 07:38:49
int u;
unsigned char uh,ul;//高四位和低八位,从芯片读入
...//读
u=uh*256+ul;//需要12位的u

其中u,uh,ul都是补码形式,我现在想得到还原的数据,怎么写?
上式中u能不能直接计算?还是需要先分别还原后再计算?

最好先计算,否则数字可能抵消彼此。尽量用位运算,数字运算很可能会出问题。
试试这样:

int u=0; //把u每一位都设成0
u=u|uh; //把高四位加上去
u=u<<8; //向左移动8位,留下低八位的位置
u=u|ul; //把低八位加上去
u=u<<4; //向左移动4位,这时u的值是正确值的16倍,不管是正是负
u=u/16; //除以16,得到正确的值