0 / 0 / 0
Регистрация: 11.06.2017
Сообщений: 13
1

Битовые операции

12.06.2017, 17:01. Показов 1157. Ответов 2
Метки нет (Все метки)

Здравствуйте, необходимо разбить двухбайтное целое число на тетрады и поменять местами 2 и 3 тетрады, оставив без изменения 1 и 4. Есть программа, которая меняет местами 1 и 4 тетрады, оставляя без изменения 2 и 3 тетрады. Может можно её как-то переделать?
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
#include <iostream>
 
using namespace std;
 
typedef unsigned short int int16;//тип двухбайтовое целое
 
void PrintNibble( int16 nibble )
//функция печати тетрады
{
    const int BIT_MASK = 0x8;//маска соответствует двоичному 1000
    for( int i = 0; i <= 3; i++ )//для каждого двоичного разряда
        //сдвигаем на i разрядов влево, тем самым делая текущий выводимый разряд старшим для тетрады
        //накладываем маску 1000, оставляя только старший разряд
        //сдвигаем старший разряд на место младшего и выводим его
        cout << ( ( ( nibble << i ) & BIT_MASK ) >> 3 );
}
 
void PrintNumber( int16 number )
//функция печати двухбайтного целого
{
    const int NIBBLE_MASK = 0xf000;//маска соответствует старшей тетраде
    for( int i = 0; i <= 3; i++ )//для каждой тетрады
    {
        //сдвигаем на i тетрад влево, тем самым делая текущую выводимую тетраду старшей для числа
        //накладываем маску , оставляя только старшую тетраду
        //сдвигаем старшую тетраду на место младшей и выводим ее
        PrintNibble( ( ( number << ( i << 2 ) ) & NIBBLE_MASK  ) >> 12 );
        cout << " ";//печатаем пробел
    }
    cout << endl;//переводим курсор на новую строку
}
 
void SwapNibbles14( int16& number )
//функция обмена 1 и 4 тетрады
{
    //запоминаем 1 и 4 тетрады, переставляя их на нужные позиции
    int16 nibble1 = ( number & 0xf000 ) >> 12;
    int16 nibble4 = ( number & 0x000f) << 12;
    number &= 0x0ff0;//обнуляем 1 и 4 тетрады
    number |= ( nibble1 | nibble4);//добавляем переставленные тетрады
}
 
int main()
{
    int16 x;
    cout << "Please enter x:" << endl;
    cin >> x;//вводи целое двухбайтное число
    cout << "Source number:" << endl;
    PrintNumber( x );//печатаем исходное число
    SwapNibbles14( x );//меняем тетрады местами
    cout << "Result number:" << endl;
    PrintNumber( x );//печатаем число с обмененными тетрадами
    return 0;//возвращаем результат
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2017, 17:01
Ответы с готовыми решениями:

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

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

Битовые операции
Собсно,если используется 4 байтовая переменная,то почему она представлена 16 битами(1010 0110 0010...

Битовые операции
Есть арифметическое выражение: y = 13 * ((2 * a + b / 8)). а, b вводятся пользователем. Как...

2
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
12.06.2017, 18:23 2
Числа изменить не можешь, что ли?
C++
1
2
3
    int16 nibble1 = ( number & 0x0F00 ) >> 4;
    int16 nibble4 = ( number & 0x00F0) << 4;
    number &= 0xF00F;
1
0 / 0 / 0
Регистрация: 11.06.2017
Сообщений: 13
12.06.2017, 18:28  [ТС] 3
Спасибо. Числа менял, но почему-то не работало, а ваш вариант скопировал, вставил и всё заработало внезапно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2017, 18:28
Помогаю со студенческими работами здесь

Битовые операции
Есть число в двоичной системе, например &quot;01000001&quot;, рядом с единицами надо заменить нули на...

Битовые операции
Вот такая вот лаба на С, уже как не думал ну не могу решить я ее. Прошу помочь, прикрепил полное...

Битовые операции
Добрый день! Помогите пожалуйста написать программу. Дано короткое целое неотрицательное...

Битовые операции
Ребят, помогите кто чем может. Дана строка unsigned char. Необходимо через каждых 4 бита вставить...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru