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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Dezmound_m
3 / 3 / 3
Регистрация: 25.02.2014
Сообщений: 20
#1

Побитовые операции в Си. Изменение отдельных битов числа - C++

25.02.2014, 15:55. Просмотров 1515. Ответов 7
Метки нет (Все метки)

Собственно задание такое: "Дано длинное целое неотрицательное число k. Получить целое число, отбросив нечетные биты данного числа k." Не совсем понимаю какой тут должен быть алгоритм... То есть, если у меня машинное слово 32 бита, тогда в результате должно получится число с 16-ю значащими битами? И как это реализовать?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2014, 15:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Побитовые операции в Си. Изменение отдельных битов числа (C++):

Функции. побитовые операции. Написать функцию, которая для заданного целого числа Х вычисляет количество единичных битов в этом числе - C++
Здравствуйте, уважаемые мастера программирования. Нуждаюсь в вашей помощи. Написать функцию, которая для заданного целого числа Х...

Побитовые операции. Инверсия нечетных битов - C++
Дано длинное целое неотрицательное число. Получить число, инвертируя его нечетные биты.

Побитовые операции (подсчитать количество парных нулевых битов, расположенных строго между единичными) - C++
Как подсчитать кол-во парных нулевых битов, расположенных строго между единичными?

Побитовые операции. Получить целое число, отбросив нечётные биты данного числа k - C++
Разработать алгоритм и составить программы на языке Си для решения задачи. Bo всех случаях, где возможно, использовать побитовые операции. ...

Вычислить квадратный корень из заданного целого числа, используя только побитовые операции - C++
Существует простой способ вычисления квадратного корня: квадратный корень из целого числа равен количеству последовательных целых чисел...

Операции с побитовыми операторами (число 8 битов и число 9 битов) - C++
Доброго времени суток всем ! Прошу ответа на несложный вопрос (...по крайней мере мне так кажется...) Есть функция: ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
HighPredator
5477 / 1843 / 343
Регистрация: 10.12.2010
Сообщений: 5,435
Записей в блоге: 3
25.02.2014, 16:49 #2
Уточните условие. Что значит "отбросить"?
Dezmound_m
3 / 3 / 3
Регистрация: 25.02.2014
Сообщений: 20
25.02.2014, 17:09  [ТС] #3
Как я понял: допустим было число 188810 = 000000000000000000000111011000002.....
Удаляем нечетные биты и получаем код длиной 16 бит 00000000000101002 = 2010
Возможно ли как то изменить значение бита в числе?
HighPredator
5477 / 1843 / 343
Регистрация: 10.12.2010
Сообщений: 5,435
Записей в блоге: 3
25.02.2014, 19:14 #4
Так в том то и штука, что если понимать под "отбросить" - "физически удалить", это будет означать де-факто изменения конкретного типа данных в рантайме (рефлексия), что в Си нереально.

Добавлено через 6 минут

Не по теме:

В С++ имелось ввиду

Dezmound_m
3 / 3 / 3
Регистрация: 25.02.2014
Сообщений: 20
25.02.2014, 19:22  [ТС] #5
Понял, спасибо. Ну если удалить не получится то можно ли как то изменить значение произвольного бита?
HighPredator
5477 / 1843 / 343
Регистрация: 10.12.2010
Сообщений: 5,435
Записей в блоге: 3
25.02.2014, 19:29 #6
Цитата Сообщение от Dezmound_m Посмотреть сообщение
можно ли как то изменить значение произвольного бита?
Это ради бога -- битовые операции.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
25.02.2014, 20:25 #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main() {
    unsigned long a = 1888, b = 0;
 
    for ( unsigned i = 0; i < sizeof( a ) * 8; i += 2 ) {
        b = b << 1 | !!((a << i) & (1 << (sizeof( a ) * 8 - 1)));
    }
    std::cout << b << std::endl;
}
Dezmound_m
3 / 3 / 3
Регистрация: 25.02.2014
Сообщений: 20
25.02.2014, 21:00  [ТС] #8
Большое спасибо вам! ))

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
Код C++

#include <iostream>
int main() {
unsigned long a = 1888, b = 0;
for ( unsigned i = 0; i < sizeof( a ) * 8; i += 2 ) {
b = b << 1 | !!((a << i) & (1 << (sizeof( a ) * 8 - 1)));
}
std::cout << b << std::endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2014, 21:00
Привет! Вот еще темы с ответами:

Побитовые операции - C++
Задание: Дано целое неотрицательное число. Определить количество составляющих его шестнадцатеричных цифр, содержащих в двоичном...

Побитовые операции - C++
Помогите решить несколько задач по битовым операциям,они все малы по реализации. И объяснить начиная с 3 задачи,что нужно сделать?А то не...

Побитовые операции - C++
Помогите пожалуйста, никак не могу справиться с этой задачкой. Выделить из числа x поле шириной n битов, начиная с позиции p, и...

Побитовые операции на с++ (<< и >>) - C++
Подскажите пожалуйста, такая задача - побитовый сдвиг на заданное количество символов сдвигает только цифры, как сделать чтобы он то же...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.02.2014, 21:00
Ответ Создать тему
Опции темы

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