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

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

Войти
Регистрация
Восстановить пароль
 
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
#1

10->2 + сдвиг+инвертация - C++

29.10.2010, 22:30. Просмотров 848. Ответов 1
Метки нет (Все метки)

Народ пожалуйста подскажите есть ли у меня ошибки в лабе


Написать программу на языке 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
88
89
90
 #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=" << m;
 
cout << endl;
cout << "Input n" << endl;
cin >> n;
cout << "N=" << n;
 
cout << endl;
cout << "Move bits X,M,Y=";
cout << endl;
bit_move(x,m,y);
 
cout << endl;
cout << "Invert X=";
cout << endl;
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 a_x, unsigned int m, unsigned int b_y)
{
 
    unsigned int f=0,j=0,xy_res;
    j=a_x<<(sizeof(int)*8-m); //x сдвинули влево (обнулили x)
    bit_print(j);
    cout << endl;
    f=b_y<<m;//y сдвинули влево на m (обнулили m битов y)
    f=f>>m;//y сдвинули вправо на m (на месте 1 получили 0)
    bit_print(f);
    cout << endl;
    xy_res=j|f; //xy_res=a_x|j|f результат замены между x и y
    bit_print(xy_res);
    cout << endl;
    return;
}
void bit_invert(unsigned int x)
{
    unsigned int f_x;
int s;
s=sizeof(int)*8;
f_x=~x;//инверируем x
x=x<<m;//сдвигаем влево
x=x>>m;//сдвигаем вправо
f_x=>>s-m;
f_x=<<s-m;
x=x|f_x;
bit_print(x);    
}
Заранее спасибо.

Добавлено через 45 секунд
пожалуйста помогите с функцией сдвига и инвертацией
а то я запутался
не понятно что они выпоняют
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2010, 22:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос 10->2 + сдвиг+инвертация (C++):

Где и когда уместно применять операции << (сдвиг влево) и >> (сдвиг вправо)? - C++
Кто может привести пример , когда нужно использовать операции: 1) &lt;&lt; сдвиг влево 2) &gt;&gt; сдвиг вправо

Инвертация - JavaScript
Почему-то не работает инвертация. Я вывожу изображение в канвасе, и теперь мне надо его изменить. Вот функция инвертации: ...

Инвертация цветов по таймеру (TASM) - Assembler
Всем доброе время суток! .model tiny .386 .code org 100h start: mov ax,3 ...

Инвертация цвета TColor для Form.Canvas - Delphi
Как инвертировать цвет для канвы формы? Я сделал вот так, но что-то мне не нравиться полученый результат - цвет не такой как бы должен...

СДВИГ - C++
люби помогите пожалуста завтра прогу сдавать очень надо дан массив unsigned short mas нужно вывести числа в которых четное количество...

СДВИГ - C++
unsigned int x = 0x1234ABCD; // число которое двигать надо unsigned int v = 1; // на сколько двигать x = (x &gt;&gt; v*4) | (x &lt;&lt; (32-v*4));...

1
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.10.2010, 05:50 #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
#include <stdio.h>
 
int main(void)
{
    /* В числах x, y младшие m из x заменить на старшие m бит из y,
       потом инвертировать 5 младших бит в x. */
    
    unsigned long x, y, m;
    unsigned long t, mask;
    
    x = 0xF01;
    y = 0x7F000000;
    m = 3;
    
    printf("0x%lX 0x%lX" "\n", x, y);
    
    t = x;
    
    mask = ~0 << m;
    
    t &= mask;
    
    printf("0x%lX" "\n", t);
    
    mask = y >> (32 - m);
    
    t |= mask;
    
    printf("0x%lX" "\n", t);
    
    mask = ~(t & 037) & 037;
    
    printf("0x%lX" "\n", mask);
    
    t &= ~037;
    
    t |= mask;
    
    printf("0x%lX" "\n", t);
    
    return 0;
}
Код
[guest@localhost tests]$ ./t
0xF01 0x7F000000
0xF00
0xF03
0x1C
0xF1C
[guest@localhost tests]$
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2010, 05:50
Привет! Вот еще темы с ответами:

Сдвиг - HTML, CSS
Здравствуйте.Я только начинаю изучать css и сейчас практикую psd макеты. Вот в чём дело,у меня почему в firefox, сдвигается блок,хотя в...

Сдвиг - Delphi
Всем привет! Нужна ваша помощь. Сегодня крайний срок, а я понять не могу как написать код. Вот задача: Задан вектор T(n), n&lt;=12....

Сдвиг - C++
#include &lt;iostream&gt; #define N 3 #define M 3 using namespace std; int main() { int array1={1,2,3,4,5,6,7,8,9};

Сдвиг перестановки. - C++
Думал алгоритм решения таков : находим минимальный элемент ставим его на первое место и сдвигаем последовательность. Но такое решение...


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

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

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