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型的中间变量。
请问对这个数据应进行怎样的操作才能正确读入并使用? 展开
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型的中间变量。
请问对这个数据应进行怎样的操作才能正确读入并使用? 展开
1个回答
展开全部
声明一个 unsigned int 类型的变量,读入的数据的最高位为有效位,而不是符号位。
追问
嗯啊,进来的是无符号了。
后面我进行了如下操作:
unsigned err_1;
err_1 = REG*pow(2,16);
double err;
err = (double)(~(err_1 - 1));
err = -err;
这样才真正转为需要的数。
如果我直接用err = -(~(err_1 - 1));的话,结果依然是个正数。
这样的操作是否有多余之处?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询