Перейти к содержанию
    

Как правильно сконвертировать 7-битное знаковое целое число в 8-битное знаковое?

44 минуты назад, repstosw сказал:

Использую ваш способ.

И на счёт скачков фазы тоже разобрался: ключевое слово - unwrap.

Проще все данные сдвинуть на 25 влево и работать с такими данными (left-aligned). Будет проще по арифметике.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/8/2024 at 12:04 PM, jcxz said:

Это одинаковое в том плане, что и то и другое - неверно.

Читайте классику - Преобразования из целочисленных типов со знаком:

Quote

Когда целое число со знаком преобразуется в целое число или тип с плавающей запятой, значение не изменяется, если оно представлено в результирующем типе.

При преобразовании целого числа со знаком в целое число большего размера значение расширяется со знаком.

То есть, если нужно преобразовать 7-битное число со знаком в 8-битное число со знаком, то нужно просто скопировать старший бит 7-битного числа в старший бит 8-битного числа.

Младшие 7 бит исходного числа (включая знак) копируются в 8-битное число без изменений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, blackfin сказал:

То есть, если нужно преобразовать 7-битное число со знаком в 8-битное число со знаком, то нужно просто скопировать старший бит 7-битного числа в старший бит 8-битного числа.

Младшие 7 бит исходного числа (включая знак) копируются в 8-битное число без изменений.

Дальше то что? Как выглядят и как обрабатываются данные в регистрах 32-разрядного CPU - имеете представление?

 

А в этих регистрах, если кладёте туда 7-и или 8-и битное значение (в младшие биты), то знаковый бит должен быть распространён вверх до 31-го бита включительно. Иначе получите проблемы при арифметических операциях. Что и наблюдалось у ТС. 

Да, компилятор перед каждой операцией с 8-битными знаковыми данными, должен сам вставлять операцию знакового расширения (SXTB) исходных операндов.

Но:

во-первых: это лишние команды;

во-вторых - надо очень аккуратно указывать типы операндов, чтобы эта команда вставлялась. А в тех выражениях таких указаний (о приведении к типу char signed) не было. Поэтому те выражения - неверные.

А самое правильное и корректное - сделать как я писал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/8/2024 at 3:10 PM, jcxz said:

Как выглядят и как обрабатываются данные в регистрах 32-разрядного CPU - имеете представление?

А с чего вы решили, что ТС будет конвертировать биты в 32-разрядном CPU ?

Может, он ищет алгоритм для ПЛИС?

В первом посте про CPU ничего не сказано, поэтому я написал так, как будет понятнее ТС'у.

То есть, в его же обозначениях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, blackfin сказал:

А с чего вы решили, что ТС будет конвертировать биты в 32-разрядном CPU ?

Я ничего не решал. Я специально указал в первом посте:

23 часа назад, jcxz сказал:

Для 32-разрядного ARM:

А после, уже ТС косвенно подтвердил, что у него как раз такой случай.

1 час назад, blackfin сказал:

Может, он ищет алгоритм для ПЛИС?

Советую почитать другие его посты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для signed 7-bit integer

(x ^ 0x40) - 0x40

Изменено пользователем pyroman

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/8/2024 at 10:17 PM, blackfin said:

А с чего вы решили, что ТС будет конвертировать биты в 32-разрядном CPU ?

Может, он ищет алгоритм для ПЛИС?

В первом посте про CPU ничего не сказано, поэтому я написал так, как будет понятнее ТС'у.

То есть, в его же обозначениях.

Правы и blackfin и jcxz.

Вариант от blackfin - если требуется результат в 8-битных ячейках памяти.

Вариант от jcxz - более универсальный: результат можно хранить в 8/16/24/32 битных ячейках памяти.

Основная идея понятна: растиражировать знаковый бит на все старшие биты.  Или сдвинуть влево, чтобы знаковый бит оказался старшим.

 

On 3/9/2024 at 12:07 AM, jcxz said:

Советую почитать другие его посты.

Что касается реализации, то в настоящее время, я делаю обработку данных на ПК.   И если идея с выделением битового потока с частотно-фазового демодулятора принесёт свои плоды (а именно в сочетании с коррекцией ошибок на мягких решениях), то есть смысл рассмотреть вопрос переноса алгоритма на ARM, ПЛИС, DSP,..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и наверное заход в википедию чтоб просто освежить забытое тоже может быть отнюдь не лишним - 
https://en.wikipedia.org/wiki/Signed_number_representations

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...