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

работа с побитовыми операциями. - C++

Восстановить пароль Регистрация
 
[Iluminate]
3 / 3 / 0
Регистрация: 28.11.2011
Сообщений: 34
22.12.2011, 20:35     работа с побитовыми операциями. #1
помогите с задачкой..
Дан массив чисел. Определить сумму тех элементов массива, двоичные коды которых содержат единицу в битах 1 и 5. Определить количество разрядов, равных 0, в двоичном представлении суммы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.12.2011, 20:56     работа с побитовыми операциями. #2
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
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
struct m{
    unsigned m5;
    unsigned m1;
} mask;
 
int main(void)
{
    size_t size = 1000000;
    int i = 0;
    double sum = 0.0;
    mask.m1 = 0x1;
    mask.m5 = 0x10;
 
    while ( i < size ){
        sum +=  ( ( i & mask.m1 ) && ( i & mask.m5 ) ) ? i : 0;
        ++i;
    }
    printf("sum = %e\n", sum);
 
    exit ( EXIT_SUCCESS );
}
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
22.12.2011, 21:11     работа с побитовыми операциями. #3
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
#include <iostream>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <numeric>
#include <iterator>
 
int main()
{
    srand(time(NULL));
    std::vector<int> v(10);
    std::generate(v.begin(), v.end(), [] { return rand() % 21; });
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    int sum = std::accumulate(v.begin(), v.end(), 0,
        [](int init, int num)
        {
            return (((num & 1) && (num & (1 << 4))) ? (init + num) : (init));
        } 
    );
    std::cout << sum << ' ';
    int count = 0;
    while(sum)
    {
        if(!(sum & 1))
            ++count;
        sum >>= 1;
    }
    std::cout << count << std::endl;
}
Без лямбда
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
#include <iostream>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <numeric>
#include <iterator>
 
template <class T> T gen() { return rand() % 21; }
 
template <class T> T func(T init, T num)
{   
    return (((num & 1) && (num & (1 << 4))) ? (init + num) : (init));
} 
 
int main()
{
    srand(time(NULL));
    std::vector<int> v(10);
    std::generate(v.begin(), v.end(), gen<int>);
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    int sum = std::accumulate(v.begin(), v.end(), 0, func<int>);
    std::cout << sum << ' ';
    int count = 0;
    while(sum)
    {
        if(!(sum & 1))
            ++count;
        sum >>= 1;
    }
    std::cout << count << std::endl;
}
[Iluminate]
3 / 3 / 0
Регистрация: 28.11.2011
Сообщений: 34
22.12.2011, 21:37  [ТС]     работа с побитовыми операциями. #4
спасибо.
[Iluminate]
3 / 3 / 0
Регистрация: 28.11.2011
Сообщений: 34
27.12.2011, 00:05  [ТС]     работа с побитовыми операциями. #5
ребят, а если мне надо выполнить определенные условия, ну скажем что - то типо такого:

1. При открытии или создании любых файлов необходимо проверять наличие ошибок ввода-вывода.
2. Результат выполнения задания должен быть представлен в на глаза-ней форме, например:
Результат объединения значений
65535 = 11111111 11111111
1 = 00000000 00000001 операцией поразрядное И (&) дори-внюе
1 = 00000000 0000000
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
27.12.2011, 03:27     работа с побитовыми операциями. #6
Цитата Сообщение от Iluminate Посмотреть сообщение
1. При открытии или создании любых файлов необходимо проверять наличие ошибок ввода-вывода.
C
1
2
3
if ( ( fopen ( file, "rw" ) ) == NULL ){
    exeption;
}
Цитата Сообщение от Iluminate Посмотреть сообщение
Результат выполнения задания должен быть представлен в на глаза-ней форме
...
1 = 00000000 0000000
что за чушь?
zulkis
27.12.2011, 06:32
  #7

Не по теме:

Цитата Сообщение от [Iluminate] Посмотреть сообщение
1 = 00000000 00000001 операцией поразрядное И (&) дори-внюе
1 = 00000000 0000000
А что такое "дори-внюе"? У меня конечно есть предположение... Но может автор совсем не это имел ввиду.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2011, 18:27     работа с побитовыми операциями.
Еще ссылки по теме:

Работа с битовыми операциями C++
Работа с битовыми операциями C++
Работа с битовыми операциями C++

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

Или воспользуйтесь поиском по форуму:
[Iluminate]
3 / 3 / 0
Регистрация: 28.11.2011
Сообщений: 34
27.12.2011, 18:27  [ТС]     работа с побитовыми операциями. #8
дори-внюе, ошибочка..
равно

Добавлено через 15 минут
Результат выполнения задания должен быть представлен в такой форме форме...

Результат объединения значений
65535 = 11111111 11111111
1 = 00000000 00000001 операцией поразрядное И (&) равно
1 = 00000000 0000000
Yandex
Объявления
27.12.2011, 18:27     работа с побитовыми операциями.
Ответ Создать тему
Опции темы

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