Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

преобразуване на число...
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=7515
Страница 1 от 1

Автор:  kiiid [ Вто Фев 02, 2010 11:27 am ]
Заглавие:  преобразуване на число...

Аз да ви питам един тъп въпрос ако може, че нещо ми е блокирало АЛУ-то тия дни...
Как се конвертира от "2's-complement" (на български май му се вика допълнителен код) към нормално число без знак? Имам предвид то е ясно че с 1-2 if {} и малко обработка ще стане ама нещо елегантно ми трябва. Сигурно има нещо с един ред...
Пример:
Имам 16-битови числа в намаляващ ред 0x7fff (32767) -> 0 -> 0xffff (-1) -> 0x8000 (-32768). Искам да ги направя 0xffff (65535) -> 0, където предполагам че първоначалната 0 ще ми стане 0x8000.
Става дума за обработка на звукови семпли.

Мерси!

Автор:  Цецо [ Вто Фев 02, 2010 11:38 am ]
Заглавие: 

Инвертиране + 1. Май така беше.

Автор:  relsys [ Вто Фев 02, 2010 11:49 am ]
Заглавие: 

Ами само прибави или извади 0x8000.

Автор:  kiiid [ Вто Фев 02, 2010 11:50 am ]
Заглавие: 

Не става Цецо :) Поне не в тоя случай.

Ето ти пример:
имам 0xfffe (т.е. -2). Инвертирам и добавям 1 и става +2, а трябва да се получи 0x8002
Ето друг:
0x5555 след инвертиране+1 става 0xaaab, а целта е 0xd555


:cry:

Автор:  sv_shady [ Вто Фев 02, 2010 12:01 pm ]
Заглавие: 

Ами ти всъщност не искаш да превърнеш от 2's complement в нормален двоичен запис (да вземеш модула все едно), а просто искаш да изместиш интервала от (-32768;32767) на (0; 65536). За това relesys e прав, просто прибави 0x8000 - половината на интервала.

Автор:  kiiid [ Вто Фев 02, 2010 12:11 pm ]
Заглавие: 

Ей, верно бе :D То понякога като задълбае човек трудното и пропуска лесното
Мерси!

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/