1

如何将带符号的 DWORD 转换为无符号的 DWORD ?

我有一种方法是二进制补码。

但是,当我这样做时,编译器给出了一个错误,即有符号数不允许按位运算(根据 MISRA 规则 2004 第 12 条规则)。

那么我怎样才能转换为无符号 Dword?

long int  num1,num2,
unsigned long int num3;

num1 = 293;
num2 = 296;

num3 = num1 - num2;

如果我运行代码,那么 num3 会加载一些像这样的 0xFFFFFFE somevalue。

但实际上想要的值 3 应该得到存储?

所以我将 unsigned long int num3 设为 long int num3。

那么num3有符号值(在这种情况下为-3)应该转换为3而不进行二进制补码?

4

2 回答 2

3

从有符号到无符号转换的定义是取值的模数,这样结果总是对应于在二进制补码机器上取原始位所得到的结果。但是您不想转换-3;您要转换距离,即差值的绝对值:abs( num1 - num2 ).

于 2012-09-04T17:07:42.170 回答
0
long num3;
...
if (num3<0) num3=-num3;

或者究竟是什么问题?

于 2012-09-04T17:05:56.213 回答