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

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

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

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

02.08.2013, 03:32. Просмотров 1070. Ответов 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);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Praktolock
 Аватар для 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
 Аватар для 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
 Аватар для 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
 Аватар для 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++
C++ Работа с битами в Char
Работа с битами C++
C++ Работа с битами числа

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

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

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