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

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

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

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

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

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

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

Битовые операции, битовые поля.
Здравствуйте! Еслть 4 диапазона чисел: 0-100, 0-100, 0-6000, 0-3. Сделать в...

Битовые операции и операции смещения языка С
Доброго времени суток господа,помогите пожалуйста.Есть 2 кода к задаче,первый...

битовые операции
при zt=13653, yt=0, xt=9949 for (k = 0; k<16; ++k) ...

Битовые операции
Задание: Как я понимаю надо создать объект типа int, но как менять местами...

Битовые операции
Сдвинуть последовательность битов вправо так, чтобы на нулевой позиции...

6
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4957 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
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);
}
0
gazlan
3143 / 1920 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
05.11.2013, 06:02 3
Цитата Сообщение от mishkazzz Посмотреть сообщение
заменить младший бит старшего байта на 1
Для 32-битного числа (4 байта):

C++
1
x |= 0x1000;
Добавлено через 12 минут
Цитата Сообщение от gazlan Посмотреть сообщение
Для 32-битного
Fix: для 32-битного нулей должно быть вдвое больше :-)
1
mishkazzz
0 / 0 / 1
Регистрация: 05.11.2013
Сообщений: 34
05.11.2013, 09:42  [ТС] 4
Спасибо огромное за помощь!
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4957 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
05.11.2013, 14:41 5
Цитата Сообщение от gazlan Посмотреть сообщение
Для 32-битного числа (4 байта):
по стандарту ничего не гарантирует, что int будет занимать 4 байта, более того, это зависит от архитектуры ОС.
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
05.11.2013, 14:49 6
Универсальный метод:
C++
1
    i |= 1 << (sizeof( i ) - 1) * 8;
2
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4957 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
05.11.2013, 15:31 7
Цитата Сообщение от MrGluck Посмотреть сообщение
bs.set(7, 1);
C++
1
bs.set(len-8, 1);
</self-fixed>
1
05.11.2013, 15:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2013, 15:31

Битовые операции
Ребят, нужен алгоритм, а желательно и код для реализации следующей функции: ...

Битовые операции
Вот такая вот лаба на С, уже как не думал ну не могу решить я ее. Прошу помочь,...

битовые операции
надо написать ф-цию, которая в данном числе(в двоичной с.с.) на заданном номере...


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

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

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