powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Побитовые операции
7 сообщений из 7, страница 1 из 1
Побитовые операции
    #33191905
Кутузов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня есть 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);
}
...
Рейтинг: 0 / 0
Побитовые операции
    #33191965
synapse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если память мне не изменяет то в асме если ты представляешь слово в двойном слове то старшие 16 бит в двойном слове заполняются знаковым битом...
Попробй учесть, может в этом ошибка...
_______________________________________________________________
@Мы медленно запрягаем, быстро ездим, и сильно тормозим.@
...
Рейтинг: 0 / 0
Побитовые операции
    #33192141
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополнение нуна сделать до двойного...
пример...

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


удачи Вам
(круглый)
...
Рейтинг: 0 / 0
Побитовые операции
    #33192274
seraTJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кутузову меня есть 2 32х битных числа (только первые 16 бит значащие....)
пока не начинаю передавать знакавые числа....
я так понял у мня проблема с передачей знакового бита...
что не так делаю?

}

Получается-то, что у тебя суммарно важны 17 битов. То есть 16 младших и один знаковый.
в 32 не помещается.

то есть, например:
-1 = 0xffffffff
65535 = 0x0000ffff
младшие 16 битов - одинаковые, а числа-то разные
...
Рейтинг: 0 / 0
Побитовые операции
    #33192490
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кутузову меня есть 2 32х битных числа (только первые 16 бит значащие....) мне их надо 32х битным словом передать
Первые 16 бит это значит числа 0x12345678 и 0x12348765 должны считаться одинаковыми? Тогда все очень просто:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int i1, i2;
//Посылаем некой функцией Send():
Send(  (((unsigned int)i1) & 0xffff0000) | (((unsigned int)i2) >>  16 ) );
//Принимаем в перменную recieved а потом разрезаем ее обратно
unsigned int recieved;
recieved = Recv(...);
i1 = recieved & 0xffff0000;
i2 = recieved << 16 ;
И не надо усложнять себе жизнь :)
...
Рейтинг: 0 / 0
Побитовые операции
    #33192524
SeraTJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, жуткая функция
private int getbytes(int x, int p, int n)
{
return (x>>(p+1-n))&~(~0<<n);
}

тут совсем ни к чему, действительно достаточно всего лишь:
i1 = recieved & 0xffff0000;
i2 = recieved <<16;

Только, Кутузов, ты определись с тем, что называешь "первыми" битами. Потому что судя по твоей программе, ты имеешь в виду младшие 16 бит.
...
Рейтинг: 0 / 0
Побитовые операции
    #33193705
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты используй биззнакавые типы данных, тагда твая праграма будит работать.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Побитовые операции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]