1

署名付き DWORD を署名なし DWORD に変換する方法は?

私は2の補数である1つの方法を持っています。

しかし、私が行ったとき、コンパイラはビット単位の演算が符号付き数値に対して許可されていないというエラーを出しています (MISRA ルール 2004 12 番目のルールに従って)。

では、どうすれば署名なしの Dword に変換できますか?

long int  num1,num2,
unsigned long int num3;

num1 = 293;
num2 = 296;

num3 = num1 - num2;

コードを実行すると、num3 に次のような 0xFFFFFFE 値がロードされます。

しかし、実際には目的の値 3 を保存する必要がありますか?

そのため、unsigned long int num3 を long int num3 にしました。

次に、num3 符号付き値 (この場合は -3) は、2 の補数を使用せずに 3 に変換する必要がありますか?

4

2 に答える 2

3

符号付きから符号なしへの変換の定義は、値のモジュラスを取得することです。そのため、結果は常に、2 の補数マシンで生のビットを取得することによって得られるものに対応します。しかし、変換したくありません-3。差の絶対値である距離を変換しますabs( num1 - num2 )

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

または、正確には何が問題なのですか?

于 2012-09-04T17:05:56.213 に答える