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

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

Войти
Регистрация
Восстановить пароль
 
Legion88
#1

Напишите программу, которая определяет, сколько единиц содержится в двоичном представлении переменной типа char - C++

24.10.2013, 22:40. Просмотров 991. Ответов 3
Метки нет (Все метки)

Только начал изучать C++, не могу понять смысл цикла в данном коде и как он помогает нам реализовать задачу.
(Напишите программу, которая определяет, сколько единиц содержится в двоичном представлении переменной типа char.)

Одни из вопросов:
1) Почему мы используем именно 128?
2) Как нам помогает собственно деление на 2 в реализации?
3) Зачем мы прибавляем единицу, после побитовой операции?

Заранее спасибо за разъяснение.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int f(char c) { 
  int r = 0;
  for( int i = 128; i > 1; i /= 2)  
      if( c & i) r++;
  return r;
}
 
int main() { 
    int a;
    char c;
    scanf("%d", &a);
    c = a;
    printf("%d \n", f(c));
    return 0;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 22:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Напишите программу, которая определяет, сколько единиц содержится в двоичном представлении переменной типа char (C++):

Определить, сколько единиц содержится в двоичном представлении переменной типа char - C++
Помогите чайнику....Напишите програмку на C++, которая определяет сколько единиц содержится в двоичном представлении переменной типа...

Определить в двоичном представлении числа максимальное количество расположенных рядом единиц - C++
Дано короткое целое неотрицательное число. Определить в его двоичном представлении максимальное количество расположенных рядом единиц.

Написать функцию int bitcount(unsigned x), возвращающую число единиц в двоичном представлении x - C++
Помогите пожалуйста решить задачи! Столько бьюсь с ними, а не получается. Я гуманитарий, для меня сложно их решить, но оочень хочется...

Определить, каких цифр больше в двоичном представлении натурального числа N-нулей и единиц - C++
Определить, каких цифр больше в двоичном представлении натурального числа N-нулей и единиц. Циклический алгоритм. Код не надо, только...

Определить, каких цифр больше в двоичном представлении натурального числа N – нулей или единиц - C++
Определить, каких цифр больше в двоичном представлении натурального числа N – нулей или единиц.

Даны два массива. Напишите программу, которая находит такую последовательность элементов максимальной длины, которая содержится и в первом, и во вт - C++
Помогите написать программу.Даны два массива. Напишите программу, которая находит такую последовательность элементов максимальной длины,...

3
m0dem
6 / 6 / 0
Регистрация: 30.09.2013
Сообщений: 28
24.10.2013, 23:04 #2
ну тут как я понял число 128 переводим в двоичный код, то бишь делим на 2 пока это возможно, а остатки нам и дадут то самое двоичное число, потом в этом двоичном числе ищем количество 1..... число 128 в двоичном коде 10000000 кажется если я не ошибаюсь
1
Ryder95
9 / 9 / 4
Регистрация: 24.10.2013
Сообщений: 216
24.10.2013, 23:27 #3
Ну у нас получается 128 - это 2 в 7 степени, если мы будем побитово умножать число на степень 2, то сможем узнать, в каких разрядах у нас есть 2, при таком побитовом умножении если получилось какое либо число - значит есть единица в представлении, если получилось 0, значит единицы нет
0
gromo
371 / 270 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.10.2013, 23:53 #4
Цитата Сообщение от Legion88 Посмотреть сообщение
Почему мы используем именно 128?
Извините, но черт его знает... Во-первых, никогда не пользуйтесь побитовыми операциями над знаковыми типами. Здесь вы используете тип char, который может быть signed char/unsigned char (на усмотрение компилятора, чаще всего signed char). ТАк вот, в тип signed char значение 128 не вместится.
Цитата Сообщение от Legion88 Посмотреть сообщение
2) Как нам помогает собственно деление на 2 в реализации?
деление на 2 это по сути сдвиг двоичного представления числа на 1 ячейку вправо. И когда мы в условии в 4-й строчке "поймаем" единичку в числе, то прибавим единичку к счетчику единичек.


И почему условие окончания цикла i > 1 ? ведь так мы не поймаем последнюю единичку. Вы вообще запускали эту программу ? Она же выдает постоянно 1...

вот исправленная версия, сравните, что я изменил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int f(unsigned char c) {
  int r = 0;
  for(unsigned int i = 128; i > 0; i /= 2)
      if( c & i) r++;
  return r;
}
 
int main() {
    unsigned int a;
    unsigned char c;
    scanf("%d", &a);
    c = a;
    printf("%u \n", f(c));
    return 0;
}
И вообще почитайте о побитовых операциях - материал не обширный, а такое беглое объяснение может породить больше вопросов, чем ответов. Поймите принцип битовых манипуляций.
Как-то так.
0
24.10.2013, 23:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2013, 23:53
Привет! Вот еще темы с ответами:

Написать функцию для перевода переменной типа long в символьную строку в шестнадцатиричном представлении ( ltoah( long num, char s[]) ) и тестирующую - C++
Написать функцию для перевода переменной типа long в символьную строку в шестнадцатиричном представлении ( ltoah( long num, char s) ) и...

Написать программу на языке С, которая рекурсивно вычисляет количество единиц в двоичном коде заданного пользователем натурального числа - C++
помогите плиз Добавлено через 12 минут Операция n := n & (n - 1) уничтожает крайнюю справа единицу в бинарном представлении числа n....

Напишите программу, которая определяет являются ли введенное число палиндромом - C++
Кто знает как решается эта задача на С++. Через цикл "while". Напишите программу, которая определяет являются ли введенное число...

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


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

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

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