Помогите вывести формулу, позволяющую выразить следующую последовательность двоичных чисел
01010101...
00110011...
00001111...
Примечание:
2Без имени
f(01010101...) = 00110011...
f(00110011...) = 00001111...
...
f = ?
Примечание:
2Ivanenko Andriy
Не бесконечно длинную. Но применимую к целым числам любой длины (8, 16, 32 и 64 бита). В примере - 8 битов, а многоточие значит, что их может быть и больше.
Ваш вариант работоспособен, но неэффективен. Меня интересует решение через логические операции и побитовый сдвиг. Ну или, может быть, привязка к номеру шага - f(0) = 01010101…, f(1) = 00110011…, f(2) = 00001111…
Примечание:
2Ivanenko Andriy:
Самый простой способ получить 11111111... это ~0 (~ = побитовое нет). :)
Что касается последовательности, то я научился получать её в обратном порядке. Например 11111111, 00001111, 00110011, 01010101. Формула следующая: x[k+1] = x[k] ^ (x[k] << i[k]), где i[0] = половина количества разрядов (= sizeof типа * 4), а i[k+1] = i[k] / 2. Теперь бы её в нормальном порядке получать. Грубо говоря, это решение уравнения: x ^ (x << a) = b (a и b известны). Есть ли у него однозначные корни?
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.