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

Как на С++ битовыми операциями переставить биты так, чтобы сначала шли все единицы, а затем все нули?

24.04.2019, 07:37. Показов 977. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Вот задача, с которой я столкнулся:

В двухбайтной ячейке памяти записана последовательность нулей и единиц. С помощью битовых операций переставьте биты так чтобы сначала шли все единицы, а затем все нули.

Вот сам код:

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
#include <iostream> 
#include <conio.h> 
#include <locale.h>
#include <istream>
 
using namespace std;
 
int main()
{
    unsigned short int s;
    unsigned short int i = 101010001101010;
    int x;
    //for 
 
    /*if = 0;
    else = 1;
    void F(int *a, int n){
        int i = 0, j = n - 1;
        while (i < j)
        {
            while (i < j && a[i] == 0)
                i++;
            while (i < j && a[j] == 1)
                j--;
            if (i < j)
            {
                a[i++] = 0;
                a[j--] = 1;
            }
        }
    }*/
 
    _asm
    {
 
        mov bx, 0
        mov ax, i
        mov cx, 16 //Счетчик
        m1: //цикл
            shl ax, 1 //Логический сдвиг влево на одну клетку
            adc bx, 0
        loop m1
        cmp bx, 0; //если единиц нет
        jz  m2 
        mov cx, bx
        m0 :
            shl ax, 1 //Логический сдвиг влево на одну клетку
            add ax, 1
        loop m0
        m2 :
            mov s, ax
    }
 
    //cout << "Число: " << s << endl;
    //cout << "Число: " << i << endl;
    _getch();
    return 0;
Проблемы, которые меня беспокоят:
1) Какой тип нужен для введения последовательности нулей и единиц?
2) Проблема возникает с алгоритмом перестановки битов единиц и нулей на С++. Тут условие уже от преподавателя(((
3) Да и как-то надо часть C++ связать с ассемблерной вставкой
помогите, пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2019, 07:37
Ответы с готовыми решениями:

Переставить элементы массива так, чтобы сначала располагались все нули, затем все единицы, а затем все пятерки
1) В массиве X(1:n) каждый элемент равен 0, 1 или 5. Переставить элементы массива так, чтобы...

Переставить элементы массива так, чтобы сначала располагались все нули, затем все двойки и, наконец, все единицы
Добрый день ! У меня к вам просьба. Помогите решить задачу по с++ начинающему чайнику. :wall:...

Отсортировать массив из 0 и 1 так, чтобы все нули находились в начале, а все единицы - в конце массива
Тема: Функции 1. Дано одномерный массив, заполненный 0 и 1 в произвольном порядке. Отсортировать...

Переставить числа в массиве таким образом, чтобы сначала шли элементы меньше a[b], затем равные a[b], и потом большие
3) Дан массив a и число b. Переставить числа в массиве таким образом, чтобы сначала шли элементы...

1
Нарушитель
8515 / 4531 / 1047
Регистрация: 12.03.2015
Сообщений: 21,304
24.04.2019, 08:58 2
Так норм?

Как на С++ битовыми операциями переставить биты так, чтобы сначала шли все единицы, а затем все нули?


Сделано без ассемблера, но раз ты шаришь в асме, аки змей, перепиши на нём по смыслу.

C++
1
2
3
4
5
6
7
8
9
/* В двухбайтной ячейке памяти записана последовательность нулей и единиц.
   С помощью битовых операций переставьте биты так чтобы сначала шли все 
   единицы, а затем все нули. */
unsigned short recombine_bits(unsigned short x)
{
  unsigned count = 0;
  while (x) x &= x - 1, count++;
  return ((1 << count) - 1) << (16 - count);
}
Криво, но работает, проверил.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2019, 08:58
Помогаю со студенческими работами здесь

Преобразовать массив так, чтобы сначала шли все элементы с вещественной частью, а потом без неё
3. Создать массив из 10 вещественных чисел. Преобразовать массив так, чтобы сначала шли все...

Преобразуйте эту строчку так, чтобы сначала в ней шли цифры, а потом - все буквы исходной строчки...
Условие: дана строчка, которая содержит буквы и цифры. Преобразуйте эту строчку так, чтобы сначала...

Отсортировать массив целых так, чтобы сначала шли отрицательные, затем положительные числа
если можно, то еще поменять порядок положительных

Записать в этот же массив сначала все положительные числа и нули, а затем все отрицательные
Дан массив из 25 вещественных чисел. Записать в этот же массив сначала все положительные числа и...


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

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

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