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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
6blgJlo'KOgeP
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 21
#1

Написать функцию которая в заданом числе меняет местами два бита с задаными номерами - C++

30.01.2012, 15:40. Просмотров 2941. Ответов 7
Метки нет (Все метки)

Сижу на экзамене очень сильно нужна помощь:

задание - написать функцию которая в заданом числе меняет местами два бита с задаными номерами

код СИ ПОМОГИТЕ!
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 15:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать функцию которая в заданом числе меняет местами два бита с задаными номерами (C++):

Написать функцию, которая меняет местами два числа, которые передаются в нее через параметры по указателю - C++
Я самое наглое , ленивое и бессовестное чудовище)) но тем не менее Напишите функцию, которая меняет местами два числа типа unsigned...

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

Написать функцию, которая меняет местами первый и последний ряд матрицы - C++
написать функциЮ которая меняеи местами первый и последний ряд матрицы(квадратной) и находит произведение элементов главной диагонали

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

Написать программу, которая получает два трехзначных числа, меняет у них местами средние цифры и выводит результат в консоль - C++
#include <iostream> using namespace std; void main() { int num = 0; int num2 = 0; cout << "Enter xxx number"; cin >>...

Описать функцию которая меняет местами значения двух параметров - C++
Описать функцию которая меняет местами значения двух параметров. Используя эту функция поменять местами значение переменных a и b введенных...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
30.01.2012, 16:12 #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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
unsigned int quad(unsigned int num) // возведение 2-ки в степень num
{
    unsigned int val = 0;
    if(num==0) 
        {return 1;}
    return val = quad(--num)*2;
};
 
int changebit(unsigned int num, int bit1=0, int bit2 = 0) //функция меняющая в числе num 2 бита местами
{
    char buf [15];
    itoa(num,buf,2);//переводит число в двоичный вид
    int lent = strlen(buf);
    bit1 = lent-bit1;//находим позиции бит в массиве
    bit2 = lent-bit2;
 
        if(bit1<0||bit1>31||bit2<0||bit2>31)return num; //небольшая проверка на ошибки
 
    char tmp = buf[bit1];
    buf[bit1] = buf [bit2];
    buf[bit2]= tmp; //здесь меняются местами биты
 
    int val = 0;
    int step = lent-1;
 
    for(int i = 0; i<lent;i++,step--)
    {
 
        if(buf[i]!='0')
        {
            val+=quad(step); высчитываем число проходом по массиву
        }
    }
    
    return val;
};
 
int main(void)
{
    int z = changebit(13,2,3);
return 0;
}
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
30.01.2012, 16:22 #3
Как-то так...
C
1
2
3
4
5
6
7
8
9
10
11
void swap_bits(int *num, int nbit1, int nbit2)
{
    int bit1 = (*num & (1 << nbit1)) >> nbit1;
    int bit2 = (*num & (1 << nbit2)) >> nbit2;
    
    *num &= ~(1 << nbit1);
    *num &= ~(1 << nbit2);
    
    *num |= bit1 << nbit2;
    *num |= bit2 << nbit1;
}
1
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
30.01.2012, 16:41 #4
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
35
36
37
unsigned int quad(unsigned int num)
{
    unsigned int val = 0;
    if(num==0) 
        {return 1;}
    return val = quad(--num)*2;
};
 
int changebit(int num, int bit1=0, int bit2 = 0)
{
    char buf [15];
    itoa(num,buf,2);
 
    int lent = strlen(buf);
    bit1 = lent-1-bit1;//здесь жучок был. -1 надо еще отнимать было
    bit2 = lent-1-bit2;//теперь работает
 
        if(bit1<0||bit1>31||bit2<0||bit2>31)return num;
 
    char tmp = buf[bit1];
    buf[bit1] = buf [bit2];
    buf[bit2]= tmp; 
    int val = 0;
    int step = lent-1;
 
    for(int i = 0; i<lent;i++,step--)
    {
 
        if(buf[i]!='0')
        {
            val+=quad(step);
        }
 
    }
    
    return val;
};
0
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
30.01.2012, 16:41 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C
1
2
3
4
5
6
7
unsigned int change(unsigned int num,unsigned char t1,unsigned char t2)
{
   if ((num >> t1 ^ num >> t2) & 1)    
        num^=1 << t1 | 1 << t2;    
    return num;
    
}
6
silent_1991
30.01.2012, 16:55
  #6

Не по теме:

Да уж, биты я доставал шикарно За объектами уже битовые операции забыл...

0
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
31.03.2013, 23:49 #7
А можно объяснить, пожалуйста?

Добавлено через 38 минут
Т.е. что деает конкретно эта операция:
C
1
x^=1<<t1|1<<t2;
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
01.04.2013, 00:08 #8
Лев Борисов, инвертирует два бита в переменной x с номерами t1 и t2
Вообще решение - просто гениальное
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2013, 00:08
Привет! Вот еще темы с ответами:

Написать программу, которая меняет местами элементы массива - C++
1.Написать программу, которая меняет местами элементы массива относительно его середины (зеркальное отображение элементов). Первый элемент...

Написать программу которая меняет местами элементы массива - C++
Уважаемые програмисты помогите решить задачи 1,Написать программу которая меняет местами элементы массива относительно его середины...

Создать функцию, которая меняет местами первую и последнюю строки квадратной матрицы - C++
Создать функцию, которая меняет местами первую и последнюю строки квадратной матрицы и находит произведение элементов главной диагонали.

Поменять местами все соседние группы из двух битов в заданом беззнаковом длинном числе - C++
Задача. Испольхуя только битовые операции, написать программу, которая меняет местами все соседние групы с 2х битов в заданом беззнаковом...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.04.2013, 00:08
Ответ Создать тему
Опции темы

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