C语言 读入32bit长度数据,最高位为1时,发现读进来的数据与源数据不同。

elipse下C语言编写中,读入一个十六进制的数据:feb851ec。本意是将其按照对负数的转化方式,按位取反再加1,得到负数-21474836。但是在int型的限制下,... elipse下C语言编写中,读入一个十六进制的数据:feb851ec。本意是将其按照对负数的转化方式,按位取反再加1,得到负数-21474836。但是在int型的限制下,最高位成为符号位,这个数读进来就已经为负数。但是高16bit的数据feb8在其最高位为1的情况下,不管怎么改变,如80ff0000、fe000000等,在打印出来都是-2147483648。该数据是赋值给一个double型变量。过程大致如下,REG是外面读进来的数据的高16bit。
int err_1;
err_1 = REG*pow(2,16);
double err;
err = err_1;
printf( "error = %.lf\n", err );

如果将REG*pow(2,16)直接赋值给err,err又因其为double型,不能进行位操作。所以才加了一个int型的中间变量。
请问对这个数据应进行怎样的操作才能正确读入并使用?
展开
 我来答
xoaxa
2014-12-19 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3475万
展开全部
声明一个 unsigned int 类型的变量,读入的数据的最高位为有效位,而不是符号位。
追问
嗯啊,进来的是无符号了。
后面我进行了如下操作:
unsigned err_1;
err_1 = REG*pow(2,16);

double err;
err = (double)(~(err_1 - 1));
err = -err;

这样才真正转为需要的数。
如果我直接用err = -(~(err_1 - 1));的话,结果依然是个正数。
这样的操作是否有多余之处?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式