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

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

Войти
Регистрация
Восстановить пароль
 
Kaskera
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 34
#1

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

27.07.2013, 16:01. Просмотров 866. Ответов 5
Метки нет (Все метки)

Здраствуйте, помогите, пожалуйста!

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

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

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

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

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

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

Битовые операции, битовые поля. - C++
Здравствуйте! Еслть 4 диапазона чисел: 0-100, 0-100, 0-6000, 0-3. Сделать в виде битовых операций. Записать в unsigned int. Использовать...

Битовые операции и операции смещения языка С - C++
Доброго времени суток господа,помогите пожалуйста.Есть 2 кода к задаче,первый работает верно(переводит обычные числа в 16-ти ричные),а...

битовые операции - C++
как из 0001 0000 тоесть в dec '8' сделать 0000 0001 в dec '1'?

Битовые операции - C++
Приветствую! Изучаю C++, не могу освоить битовые операции (перемещение, исключающие или, инвертирование всякое). Просто не понимаю...

Битовые операции - C++
Сдвинуть последовательность битов вправо так, чтобы на нулевой позиции находился первый единичный бит.

Битовые операции - C++
Задача. Я не понимаю что тут делать. Кто то что то понимает? Элементарное я понимаю сдвиги и прочее но это вообще:wall: Умоляю,...

5
Thinker
Эксперт С++
4228 / 2202 / 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;
}
1
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
0
Thinker
Эксперт С++
4228 / 2202 / 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);
}
1
Kaskera
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 34
27.07.2013, 19:18  [ТС] #5
Фантасмагорическое спасибо!)
0
Thinker
Эксперт С++
4228 / 2202 / 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;
}
1
27.07.2013, 19:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2013, 19:20
Привет! Вот еще темы с ответами:

Битовые операции - C++
Установить в ноль каждый третий значащий бит целого числа А А = 150(например) Через _itoa_s.. Битовые операции не моё совсем :(...

Битовые операции - C++
С помощью битовых операций выести на экран значение к-ого спарва бита. Помогите пожалуйста!что-то в этих битовых операциях не...

битовые операции - C++
надо написать ф-цию, которая в данном числе(в двоичной с.с.) на заданном номере ставила 1, вместо 0

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


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

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

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