0 / 0 / 2
Регистрация: 22.12.2014
Сообщений: 62
|
||||||
1 | ||||||
Инвертировать биты с парными номерами18.03.2017, 20:03. Показов 2226. Ответов 12
Метки нет (Все метки)
Если содержание принятого кода может быть представлено в виде 2 в степени n, то выполнить операцию инвертирования значимых бит с парными номерами. В противном случае выполнить циклический сдвиг принятого кода влево на 2 бита.
Не получается инвертировать биты с парными номерами, подскажите что не так в коде. И есть ли способ сделать инвертирование с помощью битовых операций, а не массивов?
0
|
18.03.2017, 20:03 | |
Ответы с готовыми решениями:
12
Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат Инвертировать биты числа Инвертировать биты определенного целого значения Инвертировать все биты в старшем байте числа. |
nmcf
|
18.03.2017, 20:09
#2
|
Не по теме: С чётными номерами. :rtfm: Грамотно излагай.
0
|
63 / 63 / 39
Регистрация: 18.11.2016
Сообщений: 562
|
||||||
18.03.2017, 20:28 | 3 | |||||
Так чтоли?
0
|
0 / 0 / 2
Регистрация: 22.12.2014
Сообщений: 62
|
|
18.03.2017, 22:08 [ТС] | 4 |
Нет, там второй массив не нужен.
Нужно инвертировать четные биты в коде. т.е второй бит, четвертый, шестой и восьмой
0
|
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
|
||||||
18.03.2017, 22:18 | 5 | |||||
Если считать от начала массива:
1
|
63 / 63 / 39
Регистрация: 18.11.2016
Сообщений: 562
|
|||||||||||
18.03.2017, 22:19 | 6 | ||||||||||
Это еще проще.
Вы можете использовать условие
1
|
0 / 0 / 2
Регистрация: 22.12.2014
Сообщений: 62
|
|
18.03.2017, 23:53 [ТС] | 7 |
работает, только оно меняет единицу на -2, а должно менять на 0
Добавлено через 5 минут И еще должны инвертироваться только те, которые идут после единицы. т.е если код 00010000, то должно быть 00000101
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
||||||
19.03.2017, 00:54 | 8 | |||||
1
|
0 / 0 / 2
Регистрация: 22.12.2014
Сообщений: 62
|
|
19.03.2017, 08:32 [ТС] | 9 |
Как я понял этот способ работает с десятичными числами, а у меня данные вводятся уже в двоичной форме (01001010)
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
||||||
19.03.2017, 09:19 | 10 | |||||
Сообщение было отмечено vizinar как решение
Решение
Можно вводить и в двоичной форме, а затем преобразовывать в целое число с помощью std::bitset.
1
|
0 / 0 / 2
Регистрация: 22.12.2014
Сообщений: 62
|
||||||
19.03.2017, 10:56 [ТС] | 11 | |||||
Все работает, всем спасибо
0
|
0 / 0 / 2
Регистрация: 22.12.2014
Сообщений: 62
|
||||||
21.03.2017, 16:02 [ТС] | 12 | |||||
а как работает эта функция?
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
21.03.2017, 16:22 | 13 |
Переменная
mask последовательно принимает значения 1, 100, 10000, и т. д., то есть содержащие одну единицу в чётных (считая с нуля) позициях. Операция x ^= mask инвертирует бит, содержащий эту единицу. Условие mask <= x нужно, чтобы инвертировались только значащие биты, а условие mask != 0 защищает от выхода маски из разрядной сетки (чрезмерного сдвига влево).
1
|
21.03.2017, 16:22 | |
21.03.2017, 16:22 | |
Помогаю со студенческими работами здесь
13
Произведение элементов массива с парными номерами обчислить произведение элементов массива с парными номерами в С++ Инвертировать 3,4,7,15 биты Инвертировать биты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |