Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
IlanTrick
0 / 0 / 0
Регистрация: 04.03.2016
Сообщений: 2
1

Побитовый сдвиг

23.05.2016, 11:55. Просмотров 773. Ответов 2
Метки нет (Все метки)

Столкнулся с проблемой.
У меня есть ключ - 0x1A305B98
Из него я получаю параметр путем
Код
int parm = (0x1A305B98 >> 20) & 0x1F;// = 3
Так вот как мне сделать так чтоб у меня в этом ключе хранился ид и параметр от 0 до 30
Есть ид от 0 до 1000000 к примеру и к нему надо добавить параметр от 0 до 30
Требуется после все го это прочитать ид и параметр типо из этого 0x1A305B98

К примеру поместить ид 150000 и параметр к нему 3, все это дело записать в ключик типо 0x1A305B98
Видел пример такой
Код
unsigned int key = 0;
key =(3&0x1F) << 20;//Записываем параметр , а как вот быть с ид?
key |=(150000&0x80000000)<<15;// так не работает как надо????
Ключи должны генерироваться при этом разные с учетом ид , а пример что выше генерит повторяющиеся
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2016, 11:55
Ответы с готовыми решениями:

Побитовый сдвиг
Выполнение данного кода приравнивает asd к нулю. Хотя должно к единице, судя по...

Побитовый сдвиг
есть допустим переменная unsigned char data = 0b10111011; Как можно...

Побитовый сдвиг
Непонятна часть программы с 24 по 45 строку. Помогите разобраться, пожалуйста....

Побитовый сдвиг
#include &lt;iostream&gt; using namespace std; int main(int argc, char** argv) {...

Побитовый сдвиг
Добрый день, помогите пожалуйста с побитовым сдвигом вправо, не получается...

2
Pink_Pank
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209
23.05.2016, 12:02 2
Лучший ответ Сообщение было отмечено IlanTrick как решение

Решение

C++
1
2
3
uint32_t ID = 0x0ABCDEFF // ID д.б. в определенном диапазоне. Например всегда с первым 0.
uint8_t param = 5; // параметр 0..255
uint32_t key = (ID << 8) + param; // либо можно просто ID + param если ID генерировать сразу с 0 в конце.
0
IlanTrick
0 / 0 / 0
Регистрация: 04.03.2016
Сообщений: 2
23.05.2016, 12:13  [ТС] 3
Проблема в том что обязательно надо брать параметр таким способом
int parm = (0x1A305B98 >> 20) & 0x1F;// = 3

Добавлено через 4 минуты
Сделал на костылях, но тут есть ограничения 2097151(0x001FFFFF) в ид
Код
unsigned int left_shift(unsigned int n,unsigned int k) {
	unsigned int i,bit;
	for (i=0; i<k; i++) {
		bit=n&0x8000?1:0;
		n<<=1;
		n|=bit;
	}
	return n;
}




//Это параметры
//0(288)
//1(289)
//2(290)
//3(291)
//4(292)
//5(293)
//6(294)
//7(295)
//8(296)
//9(297)


int gen_id(int id,int parm)
{
	int out_id = parm;
	
	out_id = left_shift(out_id,20);

	out_id |= id;

	return out_id;
}


int unkey = gen_id(7777777,291);// 291 = 3
int parm = (unkey >> 20) & 0x1F;// = 3
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2016, 12:13

Побитовый сдвиг массива
Есть двумерный массив int massiv;Нужно сдвинуть первый элемент массива в...

Побитовый сдвиг влево и вправо
Что выполнится быстрее - сдвиг влево или сдвиг вправо? И как замерить время...

Как происходит побитовый сдвиг?
for(int i = 0; i &lt; 10; i ++){ if (i &amp; (1 &lt;&lt; j)) cout &lt;&lt; i &lt;&lt; endl; }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru