Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 11.06.2017
Сообщений: 13

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

12.06.2017, 17:01. Показов 1762. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.06.2017, 17:01
Ответы с готовыми решениями:

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

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

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

2
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.06.2017, 18:23
Числа изменить не можешь, что ли?
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  [ТС]
Спасибо. Числа менял, но почему-то не работало, а ваш вариант скопировал, вставил и всё заработало внезапно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2017, 18:28
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru