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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
Ferus
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 13
#1

Задача на биты. - C++

21.11.2011, 02:21. Просмотров 1846. Ответов 10
Метки нет (Все метки)

Здраствуйте. С++ начал изучать недавно. И возникла проблема с решением задачи на биты. Вот собственно сама задача. Пока я выучил только темы Ввод-Вывод и Линейные алгоритмы. На основе этого я должен решить задачу.
Вот собственно сама задача.

Ввести целое A и посчитать сколько нулей в числе с третьего по 13 бит, включая эти биты.

Может сможете объяснить как же ее решить и немного пояснить. Буду премного благодарен. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 02:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача на биты. (C++):

Задача про биты - C++
Написать функцию, которая возвращает число, полученное из числа X,в котором все розряды, расположенные правее центральной позиции, заменены...

Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат - C++
нужна помощь в битовых операциях.Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат.

... В четных байтах числа в двоичной системе переместить нулевые биты в старшие биты, а в нечетных байтах – в младшие ... - C++
Доброго времени суток всем, столкнулся с проблемой по С++,требуется написать программу: которая получает 1)случайное целое типа int,...

биты - C++
помогите пожалуйста написать программу которая переведет натуральное число в двоичною систему исчесления и выведет на экран

Поменять местами биты - C++
Добрый вечер, такой вопрос: имеется массив из 10 чисел, их нужно перевести из десятичного представления в двоичное, найти максимум и если в...

Шумящие биты в WAV - C++
Вот такой вопросик как писать программу для сохранения собственного сообщение в звуковом файле расширения .WAV программа должна...

10
alkagolik
Заблокирован
21.11.2011, 08:15 #2
с учетом того что первый бит нумеруется как нулевой, а процессор х32
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
 
int main()
{
    unsigned int x = 123456789, tmp = 0, n, m = 13;
    n = x;
    x >>= 3;
    x <<= 16;
    x >>= 16;
 
    while ( m )
    {
        if ( !(x & 1) )
            ++tmp;
        x >>= 1;
        --m;
    }
 
    printf("нулей с 3 по 13 биты = %d\n", tmp);
    printf("число х = ");
 
    tmp = 0; x = n;
    while ( x )
    {
        printf("%d", ((x & 0x80000000) >> 31));
        x <<= 1;
    }
    puts("");
 
    return 0;
}
1
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
21.11.2011, 08:49 #3
alkagolik, сложное решение получилось.
Биты нумеруются с первого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
int main(int argc, char *argv[]) {
  int firstCountableBit = 3;
  int lastCountableBit = 13;
  int number;
  std::cout << "Enter number: ";
  std::cin >> number;
  int zeroes = 0;
 
  // подсчет основан на приведении типов
  // работает, потому что истинным считается любое значение, кроме нуля
  // и истинное значение переводится в единицу при числовом вычислении.
  for (int i = firstCountableBit - 1; i < lastCountableBit; ++i)
    zeroes += !(number & (1 << i));
    // более надежно использовать оператор "?"
    //zeroes += (number & (1 << i)) ? 0 : 1;
 
  std::cout << number << " haz " << zeroes << " zero bit(s) from bit " <<
    firstCountableBit << " up to bit " << lastCountableBit << " inclusive." <<
    std::endl;
  return 0;
}
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
21.11.2011, 09:21 #4
Биты нумеруются с нуля.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>
 
int main( int argc, char *argv[] ) {
 
unsigned A;
int count;
 
 
argc--;
argv++;
 
if ( argc<1 ) {
    fprintf( stderr, "Usage: prog number\n" );
    exit( 2 );
}
A= (unsigned)atol( argv[0] );
 
count=
((A&0x00000008)?0:1) +
((A&0x00000010)?0:1) +
((A&0x00000020)?0:1) +
((A&0x00000040)?0:1) +
((A&0x00000080)?0:1) +
((A&0x00000100)?0:1) +
((A&0x00000200)?0:1) +
((A&0x00000400)?0:1) +
((A&0x00000800)?0:1) +
((A&0x00001000)?0:1) +
((A&0x00002000)?0:1);
 
printf( "A=%u\n" "count=%d\n", A, count );
 
return 0;
 
} /* main() */
Добавлено через 1 минуту
Код
> prog.exe 12345678
A=12345678
count=7
Добавлено через 48 секунд
Тупо пересчитываем все биты без всяких циклов
1
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.11.2011, 12:47 #5
Цитата Сообщение от Ferus
Ввести целое A и посчитать сколько нулей в числе с третьего по 13 бит, включая эти биты.
нужно сдвинуть этот фрагмент к краю и посчитать единичные биты, продолжая сдвигать

Цитата Сообщение от odip
Тупо пересчитываем все биты без всяких циклов
и тут препод даёт задание посчитать, сколько нулей в числе с 12 по 7 бит
1
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
21.11.2011, 13:45 #6
и тут препод даёт задание посчитать, сколько нулей в числе с 12 по 7 бит
И что ?
Нетрудно изменить
0
alkagolik
Заблокирован
21.11.2011, 17:57 #7
Цитата Сообщение от odip Посмотреть сообщение
Тупо пересчитываем все биты без всяких циклов
не комильфо, тоже что и сквозными кейсами. Чем цикл не в тему?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main()
{
    unsigned int x = 123456789, tmp = 0, m = 0x00000008;
 
    while ( m <= 0x00002000 )
    {
        tmp += (x & m) ? 0 : 1;
        m <<= 1;
    }
 
    printf("нулей с 3 по 13 биты = %d\n", tmp);
    puts("");
 
    return 0;
}
1
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.11.2011, 22:34 #8
Цитата Сообщение от odip
И что ?
Нетрудно изменить
так не делается, не пишется пятьсот программ для пятиста задач
делается одна функция

Цитата Сообщение от alkagolik
Чем цикл не в тему?
да он просто не врубается, как из готовых функций собрать любую программу за пару часов
0
Ferus
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 13
28.11.2011, 12:37  [ТС] #9
Всем спасибо. Но мне нужно решить задачу бес использлвания битов, как я понял мне нужно такое решение как советует accept :

Цитата Сообщение от accept Посмотреть сообщение
нужно сдвинуть этот фрагмент к краю и посчитать единичные биты, продолжая сдвигать

Можете помочь?
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.11.2011, 12:50 #10
Цитата Сообщение от Ferus
Ввести целое A и посчитать сколько нулей в числе с третьего по 13 бит, включая эти биты.
приведи пример
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.11.2011, 12:51 #11
так не делается, не пишется пятьсот программ для пятиста задач
делается одна функция
Это тестовые задания
Тут чем проще - тем лучше
Поставлена задача такая - вот такую и решает
А не думаем про 100 других задач, которым нам могут задать

Можете помочь?
В посте #2 есть решение со сдвигами к краю
1
28.11.2011, 12:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2011, 12:51
Привет! Вот еще темы с ответами:

Инвертировать биты числа - C++
установить в числе 347 биты если они не установлены,а если установлены снять

Разбить файл на биты - C++
Каким образом осуществить разбиение файла на биты, а потом ещё его желательно будет и собрать. Пока, собственно вопроса по коду нету,...

Выравнивающие биты в BMP - C++
Здравствуйте. Прошу помощи, не могу найти ошибку в коде. Задача обработать взвешенным ранговым фильтром бмп файл и результат...

Инвентировать биты в байте - C++
Народ помогите пожалуйста как инвентировать биты в байте


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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