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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.89
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
#1

Как инвертировать первый бит у int? - C++

22.10.2012, 17:54. Просмотров 4502. Ответов 27
Метки нет (Все метки)

Что-то я совсем плохо соображаю. Напомните, пожалуйста, как инвертировать первый бит у int? Что бы если б там был ноль, то стал 1 и наоборот. При этом остальные биты чтоб не затрагивал. Система может быть как 16, так 32, так и 64 битной
Прила в голову идея, что первый бит отвечает за четность числа... Но хотелось бы оформить это покрасивее что ли
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2012, 17:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как инвертировать первый бит у int? (C++):

52 бит не влазит в long int - C++
вот код: struct DOUBLE{ long int S : 1; long int E : 11; long int M : 52; DOUBLE(){ *(double*)this = 0; } ...

Первый бит числа - C++
Пишу программу для сжатия файлов по алгоритму RLE. Чтобы программа понимала, что читаемое число отвечает за количество символов, я решил...

Битовые операции - перемещение бит для unsigned int - C++
Помогите разобраться, задание: Создайте функцию, которая перемещает биты для unsigned int на 30 бит в право, причем выходящие при...

Биты (поменять нулевой и первый бит, второй и третий и т.д.) - C++
Нужно поменять нулевой и первый бит, второй и третий и т.д. Тип числа - unsigned int. Хотя б алгоритм.

Удалить из каждого байта строки первый (старший) бит. - C++
Здравствуйте. Суть задачи в общем-то и отображена в названии задачи. Есть строка: unsigned char str; Необходимо в каждом...

Закодировать файл. Взять 7 байт. Первый бит каждого байта переместить в 8 байт - C++
Нужно открыть бинарный файл и закодировать следующим образом. Взять 7 байт. Первый бит каждого байта переместить в 8 байт. То есть,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
22.10.2012, 18:02 #2
вот например

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
int main()
{
   int x=4;
   x = x | (1 << 0);
   cout<<x;
   
}
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
22.10.2012, 18:04  [ТС] #3
defer, а если там будет 1, то ничего страшного не произойдет??
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
22.10.2012, 18:05 #4
Как-нибудь так
C++
1
a ^= 1;
1
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
22.10.2012, 18:07 #5
Цитата Сообщение от Buckstabue Посмотреть сообщение
а если там будет 1, то ничего страшного не произойдет??
Просто изменится второй бит, результат будет не 5, а 6
Насколько это страшно, не знаю
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
22.10.2012, 18:10  [ТС] #6
Герц, огромнейшее спасибо. Очень похоже на то что мне как раз и нужно! Сам бы три часа такого рода задачу бы решал. К утру надо программу сдать, а мозги уже не парят. Спасибо еще раз!
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
22.10.2012, 18:11 #7
Обнови страницу, я там упростил)
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
22.10.2012, 18:20  [ТС] #8
Герц, по-моему сдвиг единички на нуль позиций влево более нагляден был.
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.10.2012, 18:22 #9
Цитата Сообщение от Buckstabue Посмотреть сообщение
сдвиг единички на нуль позиций влево более нагляден был.
этот вариант неверный, так как в этом случае 1 устанавливается в младшем разряде, а не инвертируется, если вы про пост 2. естественно, вариант
a ^= 1
самый интересный, то есть обычное сложение в кольце вычетов по модулю два
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
22.10.2012, 18:25  [ТС] #10
Thinker, я имел в виду a ^= 1 << 0;
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.10.2012, 18:27 #11
Цитата Сообщение от Buckstabue Посмотреть сообщение
Thinker, я имел в виду a ^= 1 << 0;
понятно. тогда можно обобщить для инвертирования i-го (справа налево) бита))
a ^= 1 << i;
1
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
22.10.2012, 18:57 #12
Thinker, тогда инвертируются все биты позади него
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.10.2012, 19:00 #13
Цитата Сообщение от Kgfq Посмотреть сообщение
Thinker, тогда инвертируются все биты позади него
Вы уверены? инвертируется только i-ый бит))
это очевидно из определения операции ^
1
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
22.10.2012, 19:05 #14
Thinker, операция ^ инвертирует все биты в числе. А 1 << 2 уже 100. И вот на месте нулей инвертирование тоже будет
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
22.10.2012, 19:08  [ТС] #15
Kgfq, у меня, вроде, работает все как и следует.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main(void)
{
   int x = 7;
   x ^= 1 << 2;
 
   std::cout << x << std::endl;
 
   return 0;
}
Инвертируется только тот бит который я задал

Не по теме:

Эх, такое ощущение что лет 100 на Си++ не писал =) Даже заголовки забыл как называются

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2012, 19:08
Привет! Вот еще темы с ответами:

Как понять int a(int x,int y, int z)? - C++
какое значение будет у переменной а?

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

Как считать данные в vector<pair<int, pair<int, int>>> arr(m) ? - C++
Здравствуйте! Помогите, как считать данные данные в массив такого типа? vector&lt;pair&lt;int, pair&lt;int, int&gt;&gt;&gt; arr(m) Пытался вот так...

Как заполнить один int пустой массив другим int массивом ? - C++
Можно пример кода :)


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

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

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