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

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

Восстановить пароль Регистрация
 
luciys
5 / 5 / 1
Регистрация: 27.11.2012
Сообщений: 160
02.08.2013, 03:32     работа с битами #1
доброй ночи, форумчане, необходима ваша помощь) как и всем тут...
вот изучаю с++ и добрался до работы с битами, учу решением задач. на форуме, правда не на этом, нашёл несколько задач:
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++ Работа с битами.
Работа с битами. C++
C++ Работа с битами И Работа с символьными данными
Работа с битами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
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
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
02.08.2013, 04:21     работа с битами #4
Точно) Щас покумекаю
luciys
5 / 5 / 1
Регистрация: 27.11.2012
Сообщений: 160
02.08.2013, 04:23  [ТС]     работа с битами #5
вот именно, мой котелок говорит, что вроде бы верно написал, но значит он плохо варит, если компилятор говорит обратное)
а вот с 4 задачей дали бы самому подумать =)
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
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
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
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++
Работа с битами C++

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

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

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