C++ 有符号双字到无符号双字,没有两个补码?
如何将有符号双字转换为无符号双字 我有一种方法,那就是二的补足 但是,当我这样做的时候,编译器给出了一个错误,即有符号数字不允许按位操作(根据MISRA规则2004第12条规则) 那么,我怎样才能转换成无符号Dword呢C++ 有符号双字到无符号双字,没有两个补码?,c++,c,C++,C,如何将有符号双字转换为无符号双字 我有一种方法,那就是二的补足 但是,当我这样做的时候,编译器给出了一个错误,即有符号数字不允许按位操作(根据MISRA规则2004第12条规则) 那么,我怎样才能转换成无符号Dword呢 long int num1,num2, unsigned long int num3; num1 = 293; num2 = 296; num3 = num1 - num2; 如果我运行代码,那么num3将加载一些0xFFFFFFE somevalue,如下所示 但实际
long int num1,num2,
unsigned long int num3;
num1 = 293;
num2 = 296;
num3 = num1 - num2;
如果我运行代码,那么num3将加载一些0xFFFFFFE somevalue,如下所示
但实际上期望值3应该得到存储
因此,我将无符号long int num3转换为long int num3
那么num3有符号值(-3在本例中)应该转换为3,而不进行两次补码吗 long num3;
long num3;
...
if (num3<0) num3=-num3;
...
如果(num3有符号到无符号转换的定义是
模数的值,使结果始终符合您的要求
在2的补码机上取原始数据就可以了,但是你
不希望转换-3
;您希望转换距离,即
差异的绝对值:abs(num1-num2)
但是在嵌入式c中,我猜abs函数是不允许的。那么在这种情况下,我要转换多少?@danison:num3=(num1
@danison为什么不允许?(如果你不能使用std::abs
,那么编写自己的代码就相当容易了。)首先将其强制转换为unsigned,然后应用逐位运算。如果num3
具有unsigned类型,则其值永远不会小于0。