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

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

Восстановить пароль Регистрация
 
Legion88
Сообщений: n/a
24.10.2013, 22:40     Напишите программу, которая определяет, сколько единиц содержится в двоичном представлении переменной типа char #1
Только начал изучать 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++ Написать программу на языке С, которая рекурсивно вычисляет количество единиц в двоичном коде заданного пользователем натурального числа
Написать функцию для перевода переменной типа long в символьную строку в шестнадцатиричном представлении ( ltoah( long num, char s[]) ) и тестирующую C++
Даны два массива. Напишите программу, которая находит такую последовательность элементов максимальной длины, которая содержится и в первом, и во вт C++
Определить, каких цифр больше в двоичном представлении натурального числа N – нулей или единиц C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
m0dem
6 / 6 / 0
Регистрация: 30.09.2013
Сообщений: 28
24.10.2013, 23:04     Напишите программу, которая определяет, сколько единиц содержится в двоичном представлении переменной типа char #2
ну тут как я понял число 128 переводим в двоичный код, то бишь делим на 2 пока это возможно, а остатки нам и дадут то самое двоичное число, потом в этом двоичном числе ищем количество 1..... число 128 в двоичном коде 10000000 кажется если я не ошибаюсь
Ryder95
8 / 8 / 4
Регистрация: 24.10.2013
Сообщений: 216
24.10.2013, 23:27     Напишите программу, которая определяет, сколько единиц содержится в двоичном представлении переменной типа char #3
Ну у нас получается 128 - это 2 в 7 степени, если мы будем побитово умножать число на степень 2, то сможем узнать, в каких разрядах у нас есть 2, при таком побитовом умножении если получилось какое либо число - значит есть единица в представлении, если получилось 0, значит единицы нет
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.10.2013, 23:53     Напишите программу, которая определяет, сколько единиц содержится в двоичном представлении переменной типа char #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;
}
И вообще почитайте о побитовых операциях - материал не обширный, а такое беглое объяснение может породить больше вопросов, чем ответов. Поймите принцип битовых манипуляций.
Как-то так.
Yandex
Объявления
24.10.2013, 23:53     Напишите программу, которая определяет, сколько единиц содержится в двоичном представлении переменной типа char
Ответ Создать тему
Опции темы

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