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

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

Войти
Регистрация
Восстановить пароль
 
mishkazzz
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 34
#1

Битовые операции - C++

05.11.2013, 01:04. Просмотров 394. Ответов 6
Метки нет (Все метки)

Здравствуйте!

нужно решить задачу: в целом числе заменить младший бит старшего байта на 1

решается ли это битовыми сдвигами? и если да, можно ли получить хотя бы идею, как это делать (пользоваться ли signed и unsigned, например?)

заранее огромное спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2013, 01:04     Битовые операции
Посмотрите здесь:

Битовые операции C++
битовые операции C++
Битовые операции C++
C++ Битовые операции
C++ Битовые операции
C++ Битовые операции.
Битовые операции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт CЭксперт С++
6407 / 3605 / 448
Регистрация: 29.11.2010
Сообщений: 9,531
05.11.2013, 01:35     Битовые операции #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
template <typename T>
std::string foo(T value)
{
    int len = sizeof(value) * 8; // узнаем число битов
    unsigned mask = 1 << (len-1);
    std::string result;
    for (int i=0; i < len; i++, value <<= 1)
        result += ((value & mask || i == 7) ? '1' : '0');
    return result;
}
 
 
int main()
{
    std::cout << foo(45);
}
Добавлено через 7 минут
Через bitset:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <bitset>
 
template <typename T>
unsigned long foo(T value)
{
    const int len = sizeof(value) * 8; // узнаем число битов
    std::bitset<len> bs(value);
    bs.set(7, 1);
    return bs.to_ulong();
}
 
 
int main()
{
    std::cout << foo(45);
}
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,133
Записей в блоге: 1
05.11.2013, 06:02     Битовые операции #3
Цитата Сообщение от mishkazzz Посмотреть сообщение
заменить младший бит старшего байта на 1
Для 32-битного числа (4 байта):

C++
1
x |= 0x1000;
Добавлено через 12 минут
Цитата Сообщение от gazlan Посмотреть сообщение
Для 32-битного
Fix: для 32-битного нулей должно быть вдвое больше :-)
mishkazzz
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 34
05.11.2013, 09:42  [ТС]     Битовые операции #4
Спасибо огромное за помощь!
MrGluck
Ворчун
Эксперт CЭксперт С++
6407 / 3605 / 448
Регистрация: 29.11.2010
Сообщений: 9,531
05.11.2013, 14:41     Битовые операции #5
Цитата Сообщение от gazlan Посмотреть сообщение
Для 32-битного числа (4 байта):
по стандарту ничего не гарантирует, что int будет занимать 4 байта, более того, это зависит от архитектуры ОС.
castaway
Эксперт С++
4873 / 3012 / 370
Регистрация: 10.11.2010
Сообщений: 11,061
Записей в блоге: 10
Завершенные тесты: 1
05.11.2013, 14:49     Битовые операции #6
Универсальный метод:
C++
1
    i |= 1 << (sizeof( i ) - 1) * 8;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2013, 15:31     Битовые операции
Еще ссылки по теме:

Битовые операции C++
C++ Битовые операции
Битовые операции C++
C++ Битовые операции
C++ Битовые операции

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт CЭксперт С++
6407 / 3605 / 448
Регистрация: 29.11.2010
Сообщений: 9,531
05.11.2013, 15:31     Битовые операции #7
Цитата Сообщение от MrGluck Посмотреть сообщение
bs.set(7, 1);
C++
1
bs.set(len-8, 1);
</self-fixed>
Yandex
Объявления
05.11.2013, 15:31     Битовые операции
Ответ Создать тему
Опции темы

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