| Автор |
Съобщение |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
 преобразуване на число...
Аз да ви питам един тъп въпрос ако може, че нещо ми е блокирало АЛУ-то тия дни...
Как се конвертира от "2's-complement" (на български май му се вика допълнителен код) към нормално число без знак? Имам предвид то е ясно че с 1-2 if {} и малко обработка ще стане ама нещо елегантно ми трябва. Сигурно има нещо с един ред...
Пример:
Имам 16-битови числа в намаляващ ред 0x7fff (32767) -> 0 -> 0xffff (-1) -> 0x8000 (-32768). Искам да ги направя 0xffff (65535) -> 0, където предполагам че първоначалната 0 ще ми стане 0x8000.
Става дума за обработка на звукови семпли.
Мерси!
|
| Вто Фев 02, 2010 11:27 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Инвертиране + 1. Май така беше.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Вто Фев 02, 2010 11:38 am |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
Ами само прибави или извади 0x8000.
|
| Вто Фев 02, 2010 11:49 am |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Не става Цецо  Поне не в тоя случай.
Ето ти пример:
имам 0xfffe (т.е. -2). Инвертирам и добавям 1 и става +2, а трябва да се получи 0x8002
Ето друг:
0x5555 след инвертиране+1 става 0xaaab, а целта е 0xd555

|
| Вто Фев 02, 2010 11:50 am |
|
 |
|
sv_shady
Ранг: Популярен
Регистриран на: Сря Окт 11, 2006 8:19 pm Мнения: 373 Местоположение: София/Edinburgh, UK
|
Ами ти всъщност не искаш да превърнеш от 2's complement в нормален двоичен запис (да вземеш модула все едно), а просто искаш да изместиш интервала от (-32768;32767) на (0; 65536). За това relesys e прав, просто прибави 0x8000 - половината на интервала.
|
| Вто Фев 02, 2010 12:01 pm |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Ей, верно бе  То понякога като задълбае човек трудното и пропуска лесното
Мерси!
|
| Вто Фев 02, 2010 12:11 pm |
|
|