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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
#1

двоичный код - C++

17.10.2010, 15:19. Просмотров 1656. Ответов 12
Метки нет (Все метки)

есть число в десятичной системе ( напр. 25 )
нужно перевести его в двоичную систему ( 11001 )
затем переставить все 1 вперед а 0 назад ( 11100 )
и вывести опять в десятичной системе ( 28 )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2010, 15:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос двоичный код (C++):

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

Двоичный код - C++
Подскажите пожалуйста как возможно работать на С++ с двоичным кодом (b). И возможно ли это в вообще в С и нужно использовать только...

двоичный код - C++
В общем задание такое: вводим число, присвоиваем переменной, на эту перемменную указатель, и нужно вытащить побитово значение этой...

Двоичный код символа - C++
мне нужно из символа, после считывания из файла получить его двоичный код!!! подскажите плиз как это сделать!!!

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

Двоичный код Хоффмана - C++
Помогите написать программу на С++ по заданному тексту задания(задание на фото)?

12
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
17.10.2010, 16:15 #2
Ну теперь давай код и расскажи в чем проблема
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.10.2010, 16:30 #3
переводов никаких не надо, достаточно битовых операций
0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
17.10.2010, 16:56  [ТС] #4
Цитата Сообщение от odip Посмотреть сообщение
Ну теперь давай код и расскажи в чем проблема
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <iomanip>
using namespace std;
 
main()
{
   int n;
   cin >> n;
   cout << setbase(2) <<  n << endl;
}
Добавлено через 2 минуты
как сохранить этот двоичный код?
как переставить все 1 вперед а 0 назад?
0
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
17.10.2010, 17:03 #5
Я сделал. Вот код:
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
#include <iostream>
 
int dvavs(unsigned int s)
{
    unsigned int i,t;
    t=1;
    for (i=0;i<s;i++)
        t<<=1;
    return t;
}
 
int main(int argc, char *argv[])
{
    unsigned int num,t;
    const int size=sizeof(num);
    int i,ed,dvs,r,ok;
    
    std::cin>>num;
    
    ed=0;
    for (i=size*8-1;i>=0;i--)
    {
        t=num>>i;
        t=t&1;
        if (t==1) ed++;
    }
    
    dvs=0;
    t=num;
    for (i=0;t>0;i++)
        t>>=1;
    r=i;
    
    ok=0;
    for (i=ed-1;i<r;i++)
        ok=ok|dvavs(i);
    
    std::cout<<ok;
    
    return 0;
}
Только неправильно. Работает только 25 - 28. Простое совпадение.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.10.2010, 17:08 #6
Цитата Сообщение от Mayonez Посмотреть сообщение
cout << setbase(2) << n << endl;
по стандарту вообщем-то нельзя в качестве основания использовать 2, для выполнения задания достаточно использования операций |,&
0
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
17.10.2010, 17:57 #7
Вот рабочий код:
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
#include <iostream>
 
unsigned int dvavs(unsigned int s)
{
    unsigned int i,t;
    t=1;
    for (i=0;i<s;i++)
        t<<=1;
    return t;
}
 
int main(int argc, char *argv[])
{
    unsigned int num,t;
    const int size=sizeof(unsigned int);
    int i,ed,dvs,r,ok;
    
    std::cin>>num;
    
    ed=0;
    for (i=size*8-1;i>=0;i--)
    {
        t=num>>i;
        t=t&1;
        if (t==1) ed++;
    }
    // 
    
    dvs=0;
    t=num;
    for (i=0;t>0;i++)
        t>>=1;
    r=i;
    
    ok=0;
    for (i=r-ed;i<=r-1;i++)
        ok=ok|dvavs(i);
    
    std::cout<<ok;
    
    return 0;
}
Добавлено через 6 минут
сам написал

Добавлено через 28 минут
только если у вас Windows не забудьте добавить в конце функции main()
C++
1
system("pause");
У меня Ubuntu)
1
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
17.10.2010, 18:16 #8

Не по теме:

Цитата Сообщение от МаксимМВ Посмотреть сообщение
только если у вас Windows не забудьте добавить в конце функции main()
C++
1
system("pause");
У меня Ubuntu)
если у вас Windows, просто запускайте приложение из командной строки


Может, я чего то не понимаю, но если мы работаем с 32-х разрядным целым, то число 25 будет записано так:
Код
000000...0011001
а после выполнения требуемых операций -
Код
111000...0000000
что будет чем угодно, но не 28. Для того, чтобы получить 28, нужно явно ограничивать число просматриваемых разрядов, то есть так (в данном случае 5):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int main(void)
{
    unsigned int number, res;
    size_t size = /*sizeof(unsigned int) * 8*/ 5;
    size_t i, j;
    printf("Input a number: ");
    scanf("%u", &number);
    for(i = 0, res = 0, j = size - 1; i < size; ++i)
        if(number & (1 << i))
        {
            res |= 1 << j;
            --j;
        }
        
    printf("The result is %u\n", res);
    return 0;
}
В общем, это мое скромное мнение, но либо некорректно поставлено условие задачи, либо неправильно приведены примеры входных и выходных данных. Поправьте меня, если я не прав
1
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
17.10.2010, 20:53  [ТС] #9
Цитата Сообщение от Nameless One Посмотреть сообщение
В общем, это мое скромное мнение, но либо некорректно поставлено условие задачи, либо неправильно приведены примеры входных и выходных данных. Поправьте меня, если я не прав
все правильно: нужно явно ограничивать число просматриваемых разрядов
0
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
17.10.2010, 21:06 #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Написать программу на языке C++, читающую со стандартного ввода 4 деся-
тичных числа x, y,m, n. Все смещения будут указываться начиная с младшего
бита, начиная с 0.
В числах x, y младшие m из x заменить на старшие m бит из y, потом
инвертировать 5 младших бит в x.
Программа должна вывести все исходные данные в десятичном виде,
исходные и полученные значения x, y в двоичном виде в столбик, причём
справа от числа должно быть выведено имя соответствующей переменной.
В программе не должно быть более одного цикла. Не следует использовать
классы и библиотеки для работы с битовыми объектами. Рекомендуется не
изменять исходные переменные, следует определить выходные и временные
переменные. Программа должна быть корректной вне зависимости от коли-
чества бит в целом числе на данной архитектуре.

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream.h>
 
using namespace std;
void bit_print(int);
void bit_move(unsigned int,unsigned int,unsigned int);
void bit_invert(unsigned int);
 
 
int main()
{
    int x,y,m,n;
cout << "Input x" << endl;
cin >> x;
cout << "X=";
bit_print(x);
cout << endl;
cout << "Input y" << endl;
cin >> y;
cout << "Y=";
bit_print(y);
cout << endl;
cout << "Input m" << endl;
cin >> m;
cout << "M=";
bit_print(m);
cout << endl;
cout << "Input n" << endl;
cin >> n;
cout << "N=";
bit_print(n);
cout << endl;
cout << "Move bits X,M,Y=";
bit_move(x,m,y);
cout << endl;
cout << "Invert X=";
bit_invert(x);
cout << endl;
 
}
void bit_print(int a)
{
    int i;
    unsigned int maska;
    int s; 
    s=sizeof(int)*8;
    maska=1;
    maska = maska<<(s-1);
    for(int i=(sizeof(int)*8);i>0;i--)
    {
        if((a&maska)==maska)
            cout<<"1";
        else
            cout<<"0";
        maska>>=1;
    }
    
    return;
}
void bit_move(unsigned int m, unsigned int a, unsigned int b)
{
    
    unsigned int a1=0,b1=0,xy;
    b1=a<<(sizeof(int)*8-m);
    bit_print(b1);
    a1=b<<m;
    a1=a1>>m;
    bit_print(a1);
    xy=b1|a1;
    bit_print(xy);
    return;
}   
void bit_invert(unsigned int x)
{
    unsigned int a,b,b1,a1;
    a=x<<(sizeof(int)*8-5);
    bit_print(a);
    b=x>>9;
    bit_print(b);
 
    b=b<<9;
    bit_print(b);
    a1=~a;
    a1>>=(sizeof(int)*8-5);
    bit_print(a1);
    b1=b|a1;
    bit_print(b1);
}
1
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
17.10.2010, 22:15  [ТС] #11
Цитата Сообщение от JerryJackson Посмотреть сообщение
Написать программу на языке C++, читающую со стандартного ввода 4 деся-
тичных числа x, y,m, n. Все смещения будут указываться начиная с младшего
бита, начиная с 0.
В числах x, y младшие m из x заменить на старшие m бит из y, потом
инвертировать 5 младших бит в x.
Программа должна вывести все исходные данные в десятичном виде,
исходные и полученные значения x, y в двоичном виде в столбик, причём
справа от числа должно быть выведено имя соответствующей переменной.
В программе не должно быть более одного цикла. Не следует использовать
классы и библиотеки для работы с битовыми объектами. Рекомендуется не
изменять исходные переменные, следует определить выходные и временные
переменные. Программа должна быть корректной вне зависимости от коли-
чества бит в целом числе на данной архитектуре.
а это что?
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
18.10.2010, 03:35 #12
Немного переделал:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main(void)
{
        unsigned int number, res, m1, m2;
        size_t size = /*sizeof(unsigned int) * 8*/ 5;
        size_t i;
        printf("Input a number: ");
        scanf("%u", &number);
        for(i = 0, res = 0, m2 = 1 << (size - 1), m1 = 1 << i;
            i < size;
            ++i, m1 <<= 1)
                if(number & m1)
                {
                        res |= m2;
                        m2 >>= 1;
                }
                
        printf("The result is %u\n", res);
        return 0;
}
1
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
18.10.2010, 09:40 #13
Цитата Сообщение от Nameless One Посмотреть сообщение

Не по теме:

если у вас Windows, просто запускайте приложение из командной строки

Не по теме:

Нет в виндовской командной строке оч. неудобно, старые досовские команды. Я обычно пользуюсь Ubuntu и программирую в ней. Но если в винде в VirtualBox'e ассемблер учу (всегда начинают с ассемблера для доса), то я просто создаю bat файлы для вызова компилятора. И что мне не говорите, буду так делать. А вот в Ubuntu и других Linux'ах командная строка хорошая, никаких проблем с длинными именами файлов, можно быстро написать предыдущую команду, нажав кнопку вверх, удобные копирование, вставка. А так в винде лучше прописать system("pause").

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2010, 09:40
Привет! Вот еще темы с ответами:

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

Двоичный код числа - C++
Вывести на экран двоичный код однобайтового числа типа char. Теперь надо чтобы программа работала только с беззнаковыми данными....

Преобразование Букв в двоичный код - C++
Вот надыбал такой код для сабжа #include &lt;iostream&gt; using namespace std; int main() { cout&lt;&lt; &quot;Vvod: &quot;; char s;...

С++ записать в файл двоичный код - C++
Есть огромный файл с текстом, расширение *.txt. Как его можно переписать в двоичный код? Как вообще значение какой-то переменную можно...


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

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

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