Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2011, 11:31   #1
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию изменение бита в числе

дано любое число в size_t например.
мне нужно в этом числе изменить заданный бит на противоположный.
есть такая функция?
Kukurudza вне форума Ответить с цитированием
Старый 25.10.2011, 11:52   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не знаю, есть ли в C специальные средства работы для работы с битами.
а в общем случае делается так
Задаётся битовая маска, имеющая единицу в нужном разряде (задавать можно или константой, если разряд "жестко" задан, или заносить единичку в младший разряд и сдвигать влево нужное число раз (по номеру разряда))

Дальше, если нужно изменить заданный бит на противоположный произвести битовую операцию сложение по модулю 2 (xor)
Код:
ИсходноеЧисло = ИсходноеЧисло ^ БитоваяМаска;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.10.2011, 14:41   #3
igorrr37
 
Регистрация: 31.12.2010
Сообщений: 5
По умолчанию

Код:
#include <iostream>

void Print(std::size_t n)
{
    for(int i = sizeof(std::size_t) * 8 - 1; i >= 0; --i)
    {
        std::cout << ((n >> i) & 1);
    }
    std::cout << std::endl;
}

int main(){
    std::size_t n = 15, bitInd = 5; // в числе 15 меняем пятый бит
    Print(n);
    n ^= (1 << bitInd);
    Print(n);
    return 0;
}
igorrr37 вне форума Ответить с цитированием
Старый 25.10.2011, 18:07   #4
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

спасибо. вот еще способ, вдруг кому надо
#include <bitset>
другое_число = std::bitset<32>(число).flip(номер_б ита).to_ulong();
Kukurudza вне форума Ответить с цитированием
Старый 25.10.2011, 21:46   #5
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Сергей предложил самый лучший вариант.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 25.10.2011, 23:16   #6
kypck
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 35
По умолчанию

Можно использовать битовые поля. Но можно ли с помощью них изменять значение определенных битов не знаю.

Выделить значение любого бита или группы битов в какую-то переменную довольно просто организовывается
kypck вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно сделать счетчик изменения бита fanscorpions Помощь студентам 3 31.05.2011 17:20
Проверка установленности 0-го бита Sianukvil Общие вопросы C/C++ 0 01.06.2010 17:09
Число размером 1024 бита. ImmortalAlexSan Общие вопросы Delphi 1 16.04.2010 12:54
C++ получение конкретного бита... SNUPY Помощь студентам 2 26.03.2009 18:50
Замена второго бита в числе SZR Помощь студентам 4 25.01.2008 20:16