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

Битовые операции - C++

Восстановить пароль Регистрация
 
Kaskera
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 34
27.07.2013, 16:01     Битовые операции #1
Здраствуйте, помогите, пожалуйста!

Надо написать три функции, используя только битовые (для первых двух) и только битовые и арифметические операции (для третей), которые:

1) Функция, которая возвращает 1, если значения битов в двух заданых позициях беззнакового длинного целого числа совпадают.

2) Функция, которая меняет местами соседние группы из 16 битов в заданом беззнаковом длинном целом числе.

3) Функция, которая возвращает следующее четное число по заданому беззнаковому длинному целому числу.

Разработать три заданых функции в одной программе. В основной программе (функции main) ввести данные с клавиатуры, вызвать функции и вывести результат на экран. Для каждого десятичного числа из входных данных и результатов вывести его двоичный код. При разработке функций условные операторы, выражения ?: и операторы цыкла или рекурсию НЕ ИСПОЛЬЗОВАТЬ.

Буду очень признателен за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2013, 16:01     Битовые операции
Посмотрите здесь:

Битовые операции C++
C++ Битовые операции
C++ Битовые операции
C++ Битовые операции
Битовые операции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2013, 18:43     Битовые операции #2
Цитата Сообщение от Kaskera Посмотреть сообщение
Буду очень признателен за помощь.

Не по теме:

давайте начнем с этого. Пойте всем дифирамбы


1
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int check(unsigned a, unsigned pos1, unsigned pos2)
{
    return ((a >> pos1) & 1 == (a >> pos2) & 1);
}
 
int main()
{
    std::cout << check(5, 0, 2);
    return 0;
}
Kaskera
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 34
27.07.2013, 18:59  [ТС]     Битовые операции #3
Дифирамбы уже на подходе

Спасибо большое!
Можете помочь с реализацией 2 и 3 функций?

У меня есть наброски, но я не знаю, как правильно все оформить.

2) ((n >> 16) & 0x0000ffff0000ffffL) | ((n << 16) & 0xffff0000ffff0000L)

3) (n & ~1L) + 2
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2013, 19:08     Битовые операции #4
1 и 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
26
27
28
#include <iostream>
 
int check(unsigned long a, unsigned pos1, unsigned pos2)
{
    return (a >> pos1) & 1 == (a >> pos2) & 1;
}
 
unsigned long exchange(unsigned long a)
{
    return ((a & 0xFFFF) << 16) | ((a >> 16) & 0xFFFF);
}
 
void Print(unsigned long a, int n)
{
    for(int i = n - 1; i >= 0; --i)
        std::cout << ((a >> i) & 1);
    std::cout << std::endl;
}
 
int main()
{
    unsigned long a = 123, b; 
    std::cout << check(a, 5, 7) << std::endl;
    Print(a, sizeof(a) * 8);
    b = exchange(123);
    Print(b, sizeof(b) * 8);
    return 0;
}
Добавлено через 4 минуты
3.
C++
1
2
3
4
unsigned long next(unsigned long a)
{
    return a + (a & 1) + (((a + 1) & 1) << 1);
}
Kaskera
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 34
27.07.2013, 19:18  [ТС]     Битовые операции #5
Фантасмагорическое спасибо!)
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2013, 19:20     Битовые операции #6
Цитата Сообщение от Kaskera Посмотреть сообщение
Фантасмагорическое спасибо!)
да бросьте, разберитесь лучше, это полезно весь код вместе:

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
#include <iostream>
 
int check(unsigned long a, unsigned pos1, unsigned pos2)
{
    return (a >> pos1) & 1 == (a >> pos2) & 1;
}
 
unsigned long exchange(unsigned long a)
{
    return ((a & 0xFFFF) << 16) | ((a >> 16) & 0xFFFF);
}
 
void Print(unsigned long a, int n)
{
    for(int i = n - 1; i >= 0; --i)
        std::cout << ((a >> i) & 1);
    std::cout << std::endl;
}
 
unsigned long next(unsigned long a)
{
    return a + (a & 1) + (((a + 1) & 1) << 1);
}
 
int main()
{
    unsigned long a = 124, b; 
    std::cout << check(a, 5, 7) << std::endl;
    Print(a, sizeof(a) * 8);
    b = exchange(123);
    Print(b, sizeof(b) * 8);
    std::cout << next(a) << std::endl;
    return 0;
}
Yandex
Объявления
27.07.2013, 19:20     Битовые операции
Ответ Создать тему
Опции темы

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