Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
nullpointer
46 / 46 / 5
Регистрация: 30.03.2009
Сообщений: 521
#1

Разделить старшие и младшие биты в переменной - C++

24.04.2014, 11:03. Просмотров 1939. Ответов 20
Метки нет (Все метки)

Объясните дураку работу с битовыми операциями...
Есть у меня массив, где первый элемент это 32 младших бита, а второй - 32 старших
C++
1
unsigned int sp[2] = {0x11111111, 0x22222222};
Теперь мне это нужно записать в переменную, делаю вот так
C++
1
long long var = (sp[0] << 32) | (sp[1] << 32);
Далее провожу операции над этой переменной, а затем мне заново нужно разделить старшие и младшие биты. Пытаюсь сделать так (для старшей части)
C++
1
sp[1] = (var >> 32);
В итоге на выводе получаю 0.
Что не так? И как получить младшую часть? Раньше никогда с битовыми операциями дела не имел.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2014, 11:03     Разделить старшие и младшие биты в переменной
Посмотрите здесь:
... В четных байтах числа в двоичной системе переместить нулевые биты в старшие биты, а в нечетных байтах – в младшие ... C++
C++ Ввести число в битовой форме: 8 бит, старшие биты слева, младшие – справа
Как обнулить первые 4-е бита начиная с певого заряженного (первые - старшие биты) C++
Как получить биты переменной? C++
Написать функцию, меняющую в переменной типа char местами биты с номерами n и n+1 C++
C++ Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат
Перенести ведущие нули десятичного представления в младшие разряды C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
24.04.2014, 13:43     Разделить старшие и младшие биты в переменной #16
Цитата Сообщение от nullpointer Посмотреть сообщение
равен sp[1]. Это так и должно быть?
это будет в случае sizeof(one) = 8 то есть, если у тебя нет никаких 64хбитных переменных.
Я ещё раз тебя прошу, выведи на экран:
sizeof(sp[0])
sizeof(var)
sizeof(one )
sizeof(чего у тебя там ещё за переменные есть...)
и покажи нам! достало уже вторую страницу гадать, что там у тебя происходит!
nullpointer
46 / 46 / 5
Регистрация: 30.03.2009
Сообщений: 521
24.04.2014, 13:52  [ТС]     Разделить старшие и младшие биты в переменной #17
Вот вывожу размеры переменных:
sp[0] - младшая часть синхропосылки
var - переменная в которую объединяю sp[0] и sp[1]
ctr - счетчик, с которым складываю var
Разделить старшие и младшие биты в переменной
newbie666
Заблокирован
24.04.2014, 14:15     Разделить старшие и младшие биты в переменной #18
Цитата Сообщение от nullpointer Посмотреть сообщение
равен sp[1]. Это так и должно быть?
кто тебе сказал? Нет - после этого старшие байты должны встать на старшие места и младшие на младшие
nullpointer
46 / 46 / 5
Регистрация: 30.03.2009
Сообщений: 521
24.04.2014, 14:20  [ТС]     Разделить старшие и младшие биты в переменной #19
newbie666, так вот я и говорю, что после выполнения данного участка кода вывел значение one
C++
1
2
3
one=sp[0];
one=(one<<32)|sp[1];
printf("%u",one);
и он вывел значение равное sp[1].
newbie666
Заблокирован
24.04.2014, 14:44     Разделить старшие и младшие биты в переменной #20
Цитата Сообщение от nullpointer Посмотреть сообщение
и он вывел значение равное sp[1].
конечно ёлки палки, у тебя ж 8-и байтовая переменная. На будущее, всегда дебаггером смотри, а не какими то принт эфами как нубарь
Так проверь: printf("%llu",one);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2014, 14:51     Разделить старшие и младшие биты в переменной
Еще ссылки по теме:
Возвратить число, в котором переставлены две младшие цифры C++
Возвратить число, в котором переставлены две младшие цифры C++
C++ Побитовые операции (программа, которая интерпретирует старшие 3 бита как некоторое число n...)
C++ Определить сумму цифр во второй половине натурального числа (младшие разряды)
Дано натуральное число N(N > 9). Определить сумму цифр в первой половине числа (старшие разряды). Пример. N=12 C++

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

Или воспользуйтесь поиском по форуму:
nullpointer
46 / 46 / 5
Регистрация: 30.03.2009
Сообщений: 521
24.04.2014, 14:51  [ТС]     Разделить старшие и младшие биты в переменной #21
newbie666, действительно
Yandex
Объявления
24.04.2014, 14:51     Разделить старшие и младшие биты в переменной
Ответ Создать тему
Опции темы

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