подписанный меч без подписи меч без двойного дополнения?

Как преобразовать подписанный DWORD в Беззнаковый DWORD?

У меня есть один метод, который является дополнением к двум.

Но когда я это сделал, компилятор выдает ошибку, что побитовая операция недопустима для чисел со знаком (согласно 12-му правилу MISRA 2004).

Итак, как я могу преобразовать в без знака 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) должно быть преобразовано в 3, без дополнения в два?

1

Решение

Определение перехода от подписанного к неподписанному состоит в
модуль значения, так что результаты всегда соответствуют тому, что вы
получил бы, взяв необработанные биты на машине дополнения двух. Но ты
не хочу конвертировать -3; Вы хотите преобразовать расстояние, которое
абсолютная величина разницы: abs( num1 - num2 ),

3

Другие решения

long num3;
...
if (num3<0) num3=-num3;

Или в чем именно проблема?

0