Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 45
1

Побитовые операции

17.06.2016, 10:17. Показов 4852. Ответов 8
Метки нет (Все метки)

Нужна помощь. впервые встречаюсь с побитовыми операциями. задания для меня, как минимум, непонятны.
Читал теорию, но примеров инвертирования, и вообще, работу с ними, не понял и не нашел...

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

Побитовые операции
Для двух символов реализовать операцию «И» два правых байт, получив таким образом значение для...

Побитовые операции - сдвиг
Вот код. Объясните пожалуйста,почему так ведёт себя последний цикл. Как-то он странно сдвигает. ...

Побитовые операции с double
Нашел на msdn Почему так? А если мне надо побитово что-то с ним сделать? BitConverter'ом...

Логические побитовые операции
Привет изучаю как работают логические операции а именно (XOR) Вот написал програмку которая...

8
9 / 9 / 6
Регистрация: 13.11.2012
Сообщений: 173
17.06.2016, 10:44 2
b_boy_arny, что именно непонятно? Ну вот число 4, в двоичном представлении 100. Инвертируем порядок байт получаем 001 = 1. Про побитовые операторы можно прочитать https://msdn.microsoft.com/ru-... .110).aspx, и была похожая тема Поменять порядок бит в байте. Представить элементы в шеснадцатеричном формате можно с помощью
C#
1
Convert.ToString(x, 16)
, например
0
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 45
17.06.2016, 10:51  [ТС] 3
Биты отрицательных чисел сдвинуть вправо на два разряда, а биты 0 и 4 положительных чисел сбросить.

это и непонятно
0
9 / 9 / 6
Регистрация: 13.11.2012
Сообщений: 173
17.06.2016, 11:01 4
b_boy_arny, ну, если число отрицательно, выполняем сдвиг на два разряда вправо x >> 2. Как менять значения битов написано в теме. Попробуйте сначала решить самостоятельно, материал есть.
0
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 45
17.06.2016, 11:11  [ТС] 5
спасибо, стало чуть яснее, что и как делать. статья и ваши примеры помогли)
0
Master of Orion
Эксперт .NET
6087 / 4943 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.06.2016, 11:17 6
b_boy_arny, чтобы сбросить n-й бит нужно умножить на число, где все единицы кроме того бита, который сбрасываем. Вспоминаем булевскую логику:
x & 1 = x;
x & 0 = 0;

таким образом все биты, где единица стоит, будут сохранены, а где ноль - сброшены.
Пусть у нас есть некоторое число (один байт для простоты). У него биты такие:
C#
1
a b c d e f g h
Теперь мы хотим сбросить второй и предпоследний биты. Окей, по логике выше умножаем на нужное число:
C#
1
2
3
4
5
a b c d e f g h
& & & & & & & &
1 0 1 1 1 1 0 1
_______________
a 0 c d e f 0 h
Получили что хотели, два бита сброшены, остальные сохранили исходное значение.
0
Эксперт .NET
5335 / 4129 / 1185
Регистрация: 12.10.2013
Сообщений: 11,975
Записей в блоге: 2
17.06.2016, 11:18 7
b_boy_arny, не скажу что силен в битовых операциях, но вот как-то так можно, по первому вопросу.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            char[] chars = { 'a', 'b', 'c', 'd', 'e', 'f' };
            foreach (char ch in chars) {
                string nonInverted = Convert.ToString((byte)ch, 2);
                string inverted = Convert.ToString((byte)~ch, 2);
                Console.WriteLine("Non inverted: {0}, Inverted: {1}",
                     nonInverted, inverted);
            }
            Console.ReadLine();
        }
    }
}
P.S. На будущее, один вопрос-одна тема, согласно правилам.
0
Master of Orion
Эксперт .NET
6087 / 4943 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.06.2016, 11:27 8
insite2012, надо инвертировать порядок, а не сами биты

Добавлено через 7 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        static void Main(string[] args)
        {
            byte b = 4;
            byte reverse = Reverse(b);
            Console.WriteLine(reverse); // 32
        }
 
        static byte Reverse(byte b)
        {
            int x = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
            x = (x & 0xCC) >> 2 | (x & 0x33) << 2;
            x = (x & 0xAA) >> 1 | (x & 0x55) << 1;
            return (byte) x;
        }
0
Эксперт .NET
5335 / 4129 / 1185
Регистрация: 12.10.2013
Сообщений: 11,975
Записей в блоге: 2
17.06.2016, 14:39 9
Цитата Сообщение от Psilon Посмотреть сообщение
надо инвертировать порядок
Согласен, прощелкал одним местом.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2016, 14:39

Побитовые операции с целыми числами
Есть две переменные a и b. Обе задаются значениями в диапазоне включительно. Возможно ли какими...

Задача на побитовые операции. Расчёт премий сотрудникам
Добрый день, помогите пожалуйста решить задачу. Задача именно на ПОБИТОВЫЕ операции... Напишите...

Побитовые НЕ
Привет, ребят. Возможно дико туплю, но не могу понять одного момента. Каким образом побитовое НЕ...

Реализовать класс MyArray, который бы поддерживал индексные операции, операции сложения, вычитания, умножения, деления
Необходимо реализовать класс MyArray, который бы поддерживал индексные операции, операции сложения,...


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

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

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