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

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

Войти
Регистрация
Восстановить пароль
 
luciys
5 / 5 / 1
Регистрация: 27.11.2012
Сообщений: 160
#1

работа с битами - C++

02.08.2013, 03:32. Просмотров 1117. Ответов 8
Метки нет (Все метки)

доброй ночи, форумчане, необходима ваша помощь) как и всем тут...
вот изучаю с++ и добрался до работы с битами, учу решением задач. на форуме, правда не на этом, нашёл несколько задач:
1. Посчитать сколько нулей в числе с третьего по 13 бит, включая эти биты.
2. Инвертировать все биты с 2 по 14 включая эти биты.
3. Определить на сколько в числе А больше значущих битов, что равны единице, чем битов, что равны нулю.
4. Используя битовые операции проверить ли число А кратно 16 (вариации: кратно 4, кратно 8).
5. Установить в единицу каждый второй значущий бит целого числа А.

и проблемы возникли с первой же задачи =(
вот сам цикл подсчёта, но в большинстве тестов он не прав
C++
1
2
for (i=2; i<13; i++)
    k += (( a >> i) ^ 1);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2013, 03:32     работа с битами
Посмотрите здесь:

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

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

Работа с битами - C++
Стоит задача: вывести все двоичные коды чисел от 0 и до 2n-1. Сделать напролом могу(переводить в цикле каждое число в двоичную с-му и...

Работа с битами - C++
Я уже задолбался... :wall: Может мне кто нибудь подскажет как из 00111010 (58) получить 00001010 (10) хотя бы каким методом... код...

Работа с битами. - C++
помогите!! как писать эту на программе с++ Ввести последовательность из 8 символов. Сравнить 5-й и 6-й биты каждого символа. Если они...

Работа с битами - C++
три раза писал но все равно не получается((( 1-)Ввести последовательность из 8 символов. Сравнить 5-й и 6-й биты каждого символа. Если...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
02.08.2013, 04:14     работа с битами #2
C++
1
2
for (i=2; i<13; i++)
    k += (( a >> i) & 1);
Добавлено через 1 минуту
^ - это XOR. 1^1==0

Добавлено через 1 минуту
для инвертирования бита можно его с единицей поксорить как раз

Добавлено через 1 минуту
Цитата Сообщение от luciys Посмотреть сообщение
Используя битовые операции проверить ли число А кратно 16 (вариации: кратно 4, кратно 8).
четвертый бит должен быть 1, все биты младше должны быть 0 (для кратности 16)
luciys
5 / 5 / 1
Регистрация: 27.11.2012
Сообщений: 160
02.08.2013, 04:19  [ТС]     работа с битами #3
нужно же посчитать количество 0, а 0&1=0 же
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
02.08.2013, 04:21     работа с битами #4
Точно) Щас покумекаю
luciys
5 / 5 / 1
Регистрация: 27.11.2012
Сообщений: 160
02.08.2013, 04:23  [ТС]     работа с битами #5
вот именно, мой котелок говорит, что вроде бы верно написал, но значит он плохо варит, если компилятор говорит обратное)
а вот с 4 задачей дали бы самому подумать =)
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
02.08.2013, 04:29     работа с битами #6
C++
1
2
for (i=2; i<13; i++)
    k += ((( a >> i) & 1)^1);
luciys
5 / 5 / 1
Регистрация: 27.11.2012
Сообщений: 160
02.08.2013, 04:31  [ТС]     работа с битами #7
спасибо огромное) а почему с хor-oм не работает?
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
02.08.2013, 04:36     работа с битами #8
Я второй вариант удалил, бред написал, чота очень невнимательный сегодня.

Добавлено через 3 минуты
Цитата Сообщение от luciys Посмотреть сообщение
спасибо огромное) а почему с хor-oм не работает?
Ну вообще-то там есть XOR. Смотри вообщем, в твоём коде что происходит.
Например у нас число 0011 (для простоты 4 бита всего)
В первую итерацию сдвигаем на 0, то есть ничего не сдвигаем, просто ксорим с 1:
0011^1==0010 (то есть 2 в десятичном)
k+=2;
и счётчик нулей становится 2(!). Тут-то и ошибка. Перед тем как прибавлять к счётчику, нужно биты старше нулевого обнулить, то есть сделать &1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2013, 04:43     работа с битами
Еще ссылки по теме:

Работа с битами числа - C++
Извлечь 5 битов числа A, начиная со второго и вставить их в число B, начиная с третьего бита. Нашел код...

Работа с битами в Char - C++
Доброго времни суток! Стоит задача сделать операцию сложения битов по модулю 2 над двумя объектами типа char, приравнять полученный...

Работа с битами, сумма ряда - C++
Выполнить следующие задания: 1. Определить, является ли указанный бит 1 или 0 в числе a. 2. Инвертировать указанный с клавиатуры бит...

Работа с битами. Чтение переменной по битам - C++
Всем привет.. задача такая: Есть некое число, находящееся в переменной X в шестнадцатеричной системе счисления.. Необходимо в...


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

Или воспользуйтесь поиском по форуму:
luciys
5 / 5 / 1
Регистрация: 27.11.2012
Сообщений: 160
02.08.2013, 04:43  [ТС]     работа с битами #9
всё, понял ошибку. неправильно понимал работу, спасибо)
Yandex
Объявления
02.08.2013, 04:43     работа с битами
Ответ Создать тему
Опции темы

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