| Микроконтролери и електроника 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 |
|
| Автор: | sv_shady [ Вто Фев 02, 2010 12:01 pm ] |
| Заглавие: | |
Ами ти всъщност не искаш да превърнеш от 2's complement в нормален двоичен запис (да вземеш модула все едно), а просто искаш да изместиш интервала от (-32768;32767) на (0; 65536). За това relesys e прав, просто прибави 0x8000 - половината на интервала. |
|
| Автор: | kiiid [ Вто Фев 02, 2010 12:11 pm ] |
| Заглавие: | |
Ей, верно бе Мерси! |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|