Member 7679408 Ответов: 2

Преобразование дополнения 2 в десятичное число


Я работаю в c#, и у меня есть байт, представляющий значение дополнения 2 к числу, и мне нужно преобразовать его в десятичное число. Этот байт поступает от акселерометра LIS302DL. Заранее спасибо!

Sergey Alexandrovich Kryukov

"десятичная" на каком языке? Или это десятичная строка? В чем проблема?
--СА

2 Ответов

Рейтинг:
2

Sergey Alexandrovich Kryukov

"Байт, представляющий дополнение 2", может означать только одно: подразумеваемый тип-это подписанный байт (или это не дополнение 2). Вы можете привести/преобразовать его непосредственно в переменную типа int или любого другого более широкого целочисленного типа со знаком, неявно, путем присваивания. Непонятно, что вы подразумеваете под "десятичной дробью". В этом случае это строка, вы можете преобразовать ее в строку с помощью sprintf или ToString.

—СА


Member 7679408

Мне нужно преобразовать прочитанный байт в отрицательное или положительное число.

Sergey Alexandrovich Kryukov

Я уже ответил. Забудь о веревке. Ваш подписанный байт уже является положительным или отрицательным числом, которое является дополнением 2. Ваша ОС (как и почти все они) также работает с дополнением 2, так что все совместимо. Вы также можете присвоить значение подписанного байта любому более широкому знаковому типу.
--СА

Рейтинг:
1

Hendrik Vis

Я знаю, что вопрос старый, но, черт возьми, пример для следующего парня не повредит. Математика для этого довольно проста.

public static int ConvertTwosComplementByteToInteger(byte rawValue)
{
    // If a positive value, return it
    if ((rawValue & 0x80) == 0)
    {
        return rawValue;
    }

    // Otherwise perform the 2's complement math on the value
    return (byte)(~(rawValue - 0x01)) * -1;
}


Maciej Los

Пожалуйста, прочтите это: Демистифицированная Плавающая Точка, Часть 1[^]