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

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

17.04.2015, 18:40. Показов 1080. Ответов 9
Метки нет (Все метки)

Добрый день!

Помогите пожалуйста написать программу.
Дано короткое целое неотрицательное число(2 байта). Выполнить инверсию
двоичного представления входящих в его состав четных
восьмеричных цифр.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2015, 18:40
Ответы с готовыми решениями:

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

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

Битовые операции
#include<iostream> #include<climits> int main() { unsigned int a = UINT_MAX; unsigned short...

Битовые операции
Здравствуйте, необходимо разбить двухбайтное целое число на тетрады и поменять местами 2 и 3...

9
2831 / 1640 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
17.04.2015, 18:59 2
И чем помочь?
0
0 / 0 / 0
Регистрация: 25.10.2014
Сообщений: 151
18.04.2015, 18:14  [ТС] 3
Как в этом числе найти четные восьмеричные цифры?
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
18.04.2015, 18:58 4
А формат-то какой? Что за восьмеричные цифры?
0
случайный прохожий
2228 / 1468 / 503
Регистрация: 20.07.2013
Сообщений: 4,155
18.04.2015, 19:52 5
Наверно нужно сначала перевести число в восьмеричное. Далее делаем инверсию.
Только не понятно, что в итоге должно быть (ясно, что измененное число, только в каком виде, в какой СС - хз).
0
3093 / 2413 / 256
Регистрация: 11.03.2009
Сообщений: 5,450
18.04.2015, 20:06 6
Цитата Сообщение от gunslinger Посмотреть сообщение
Наверно нужно сначала перевести число в восьмеричное.
Переводить в восмеричную систему нужно для вывода данных и результата на экран. А для получения результата хватит битовых операций.
0
случайный прохожий
2228 / 1468 / 503
Регистрация: 20.07.2013
Сообщений: 4,155
18.04.2015, 22:01 7
В принципе, да. Но для новичка будет менее наглядно и понятно.
Если делать без перевода, то получится примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
unsigned short int my_bit_inverse (unsigned short int n)
{
  unsigned short int base = 8, base2 = 3, result = 0, temp, temp2, count = 0;
  // base2 = Log2(base)
  do
  {
    temp = n % base;
    temp2 = base2 * count;
    // temp ^ (base - 1) - инверсия
    result += (temp % 2 == 0) ? (temp ^ (base - 1)) << temp2 : temp << temp2;
    n /= base;
    count++;
  }
  while (n > 0);
  return result;
}
Результат:
my_bit_inverse(32768) = 65535
Если нужно учитывать незначащие цифры (нули слева), то замени 14-ю строку на
C++
1
  while (count <= 8 * sizeof(n) / base2);  // 8 - кол-во бит в байте
1
0 / 0 / 0
Регистрация: 25.10.2014
Сообщений: 151
20.04.2015, 18:40  [ТС] 8
Подскажите, вот написал, а как теперь сделать так, чтобы выводилось в двоичной системе?
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
#include <iostream>
#include <stdio.h>
using namespace std;
unsigned short int my_bit_inverse(unsigned short int n)
{
    unsigned short int base = 8, base2 = 3, result = 0, temp, temp2, count = 0;
    // base2 = Log2(base)
    do
    {
        temp = n % base;
        temp2 = base2 * count;
        // temp ^ (base - 1) - инверсия
        result += (temp % 2 == 0) ? (temp ^ (base - 1)) << temp2 : temp << temp2;
        n /= base;
        count++;
    } while (count <= 8 * sizeof(n) / base2);  // 8 - кол-во бит в байте
    cout << "Результат: " << result;
    return 0;
}
int main()
{
    int n;
    cout << "Введите число: ";
    cin >> n;
    my_bit_inverse(n);
    system("pause");
}
0
Модератор
Эксперт по электронике
8734 / 6525 / 886
Регистрация: 14.02.2011
Сообщений: 22,840
20.04.2015, 18:47 9
Цитата Сообщение от nmcf Посмотреть сообщение
А формат-то какой? Что за восьмеричные цифры?
тебе ж сказали
Цитата Сообщение от Zed11 Посмотреть сообщение
Дано короткое целое неотрицательное число(2 байта).
восмеричные это три бита
итого нужно инвертировать 1 3 и 5 тройку 0 2 и 4тое восьмерчное число
вот маска 0111000111000111 0x71C7
C++
1
2
3
unsigned short a; 
cin>>a;
a^=0x71C7;
0
случайный прохожий
2228 / 1468 / 503
Регистрация: 20.07.2013
Сообщений: 4,155
20.04.2015, 19:45 10
В моем понимании четные цифры - это именно четные (0, 2, 4, 6 для восьмеричного представления).
А ты предлагаешь вариант цифр, расположенных на четных местах, насколько смог понять (я не ошибаюсь?).

Касаемо перевода десятичного числа в двоичное - Для заданного целого десятичного числа N получить его представление в p-ичной системе счисления (тут общий случай) - переделать под консоль / чистый С++ труда не составит (я на Билдере "сижу").
Можно еще сразу выводить в двоичном виде, если так среда позволяет.
Также могу предложить извращенный вариант, но немного позже.

Добавлено через 20 минут
Вот "извращенный вариант":
C++
1
2
3
4
5
6
7
8
9
10
11
12
unsigned long long BDSM_DecToBin (unsigned short int n)
{
  unsigned long long res = 0, mult = 1;
  do
  {
    res += (n % 2) * mult;
    n /= 2;
    mult *= 10;
  }
  while (n > 0);
  return res;
}
Например, BDSM_DecToBin(667) = 1010011011
BDSM_DecToBin(32768) = 1000000000000000
BDSM_DecToBin(65535) = 1111111111111111

Суть в том, что десятичное число переводится в двоичное, но двоичный результат "присваивается" также десятичному числу. Хотя выглядит оно, как двоичное. Такой вариант позволяет обойтись без строк при "конвертации", накладывая, однако, ограничения на операции с полученным числом (хотя ничего с ним более делать вроде не требуется) в виду его "двойственности".

Добавлено через 7 минут
Можно заменить
C++
1
n /= 2;
на
C++
1
n >>= 1;
чтобы "показать свои знания".
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2015, 19:45
Помогаю со студенческими работами здесь

битовые операции
как из 0001 0000 тоесть в dec '8' сделать 0000 0001 в dec '1'?

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

битовые операции
надо написать ф-цию, которая в данном числе(в двоичной с.с.) на заданном номере ставила 1, вместо 0

Битовые операции
Напишите программу в которой обьявите короткое целое со значением 12345 и определите путем ...


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

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

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