
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
29.07.2005, 15:04
|
|||
|---|---|---|---|
Побитовые операции |
|||
|
#18+
у меня есть 2 32х битных числа (только первые 16 бит значащие....) мне их надо 32х битным словом передать я выризаю из 1го и 2го первые 16 бит и засовываю их в 32 бита на приеме вырезаю первые 16 и 2ее 16 делаю из них 2 числа все работает ОК пока не начинаю передовать знакавые числа.... я так понял у мня проблема с передачей знакового бита... что не так делаю? вот так врезаю с= a | b << 16 вот так вырезаю value1=getbytes(temp_sample,15,16); value2=getbytes(temp_sample,31,16); private int getbytes(int x, int p, int n) { return (x>>(p+1-n))&~(~0<<n); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.07.2005, 15:23
|
|||
|---|---|---|---|
Побитовые операции |
|||
|
#18+
Если память мне не изменяет то в асме если ты представляешь слово в двойном слове то старшие 16 бит в двойном слове заполняются знаковым битом... Попробй учесть, может в этом ошибка... _______________________________________________________________ @Мы медленно запрягаем, быстро ездим, и сильно тормозим.@ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.07.2005, 16:17
|
|||
|---|---|---|---|
Побитовые операции |
|||
|
#18+
Дополнение нуна сделать до двойного... пример... int a, z, k; a = 0; z = 3; k = -3; a = z | k<<16; int j=getbytes(a,15,16); int m=getbytes(a,31,16); MOVE1 CWDE MOVE2 где MOVE1, CWDE, MOVE2 определены как... #define MOVE1 _asm mov eax,[m]; #define CWDE _asm cwde; #define MOVE2 _asm mov [m],eax удачи Вам (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.07.2005, 16:57
|
|||
|---|---|---|---|
|
|||
Побитовые операции |
|||
|
#18+
кутузову меня есть 2 32х битных числа (только первые 16 бит значащие....) пока не начинаю передавать знакавые числа.... я так понял у мня проблема с передачей знакового бита... что не так делаю? } Получается-то, что у тебя суммарно важны 17 битов. То есть 16 младших и один знаковый. в 32 не помещается. то есть, например: -1 = 0xffffffff 65535 = 0x0000ffff младшие 16 битов - одинаковые, а числа-то разные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.07.2005, 18:35
|
|||
|---|---|---|---|
Побитовые операции |
|||
|
#18+
кутузову меня есть 2 32х битных числа (только первые 16 бит значащие....) мне их надо 32х битным словом передать Первые 16 бит это значит числа 0x12345678 и 0x12348765 должны считаться одинаковыми? Тогда все очень просто: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.07.2005, 19:01
|
|||
|---|---|---|---|
|
|||
Побитовые операции |
|||
|
#18+
да, жуткая функция private int getbytes(int x, int p, int n) { return (x>>(p+1-n))&~(~0<<n); } тут совсем ни к чему, действительно достаточно всего лишь: i1 = recieved & 0xffff0000; i2 = recieved <<16; Только, Кутузов, ты определись с тем, что называешь "первыми" битами. Потому что судя по твоей программе, ты имеешь в виду младшие 16 бит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&tablet=1&tid=2032945]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
93ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 429ms |

| 0 / 0 |
