如何将签名的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而不做二进制补码?
答案 0 :(得分:3)
从签名到无签名的转换定义是采取
模数值,使结果始终对应于你
通过在二进制补码机器上取原点来获得。但是你
不想转换-3
;你想转换距离,这是
差异的绝对值:abs( num1 - num2 )
。
答案 1 :(得分:0)
long num3;
...
if (num3<0) num3=-num3;
究竟是什么问题?