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

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

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

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

02.08.2013, 03:32. Просмотров 1136. Ответов 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);
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2013, 03:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос работа с битами (C++):

Работа с битами И Работа с символьными данными - C++
1. Ввести 8 символов. В символе с наибольшим кодом заменить 5-й бит единицей, а в символе с наименьшим кодом 6-й бит - нулем. Вывести...

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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)
1
luciys
5 / 5 / 1
Регистрация: 27.11.2012
Сообщений: 160
02.08.2013, 04:19  [ТС] #3
нужно же посчитать количество 0, а 0&1=0 же
0
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
02.08.2013, 04:21 #4
Точно) Щас покумекаю
1
luciys
5 / 5 / 1
Регистрация: 27.11.2012
Сообщений: 160
02.08.2013, 04:23  [ТС] #5
вот именно, мой котелок говорит, что вроде бы верно написал, но значит он плохо варит, если компилятор говорит обратное)
а вот с 4 задачей дали бы самому подумать =)
0
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);
1
luciys
5 / 5 / 1
Регистрация: 27.11.2012
Сообщений: 160
02.08.2013, 04:31  [ТС] #7
спасибо огромное) а почему с хor-oм не работает?
0
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
1
luciys
5 / 5 / 1
Регистрация: 27.11.2012
Сообщений: 160
02.08.2013, 04:43  [ТС] #9
всё, понял ошибку. неправильно понимал работу, спасибо)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2013, 04:43
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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