Что касается бинарной задачи c++. Может объяснить или дать решение этого вопроса .
C++ может сдвигать биты влево или вправо, но не содержит встроенных функций для поворота битов в целое число.
Я... каждый бит смещен влево. Если пятый бит оказывается единицей, мы считаем это переполнением и перемещаем его в крайнее правое положение, эффективно "вращая" биты.
II... Обратите внимание на использование двоичных литералов. Префикс 0b позволяет указывать двоичные литералы как нули и единицы.
III... Обратите внимание, что двоичный код и значения и переполнения сравнивается с переполнением, чтобы определить, соответствует ли один бит независимо от состояния других битов. Этот прием, известный как маскировка, потребуется несколько раз на протяжении всей программы.
5. объявите четыре целых числа (inValvesOpen, outValvesOpen, pistonUp, cylinderFire) и инициализируйте их 4-битными двоичными литералами в соответствии со следующей таблицей цилиндров. Обратите внимание, что в каждой переменной крайний левый бит представляет цилиндр 1, а крайний правый бит-цилиндр
6. Создайте цикл for, который выполняется пять раз. Весь оставшийся код должен быть реализован в этом цикле.
7. объявите шесть отображаемых строк, которые в сочетании представляют начальное состояние ASCII art
8. объявите внутренний цикл, c, который выполняется 4 раза, один раз для каждого цилиндра, начиная с нуля (цилиндр 1).
Я.... Объявите целочисленное смещение и инициализируйте его в начальную позицию определенного цилиндра в строках отображения. (Каждый цилиндр имеет девять символов в ширину.)
II... Объявите шесть символьных переменных, которые будут использоваться для хранения символа, представляющего различные изменяющиеся части цилиндра.
III. Объявите целочисленную позиционную маску и инициализируйте один бит в позиции, представляющей цилиндр 1.
i. чтобы изменить маску для представления бита в положении текущего цилиндра, сдвиньте его вправо на c.
IV. Используйте маску положения для определения состояния впускного клапана текущего цилиндра. Если открыто (1), измените представление символов inValve на " o "и установите метку состояния на" I’ (вход)
V. Проверьте положение поршня, используя ту же маску. Если в верхнем положении:
i. измените символ upPiston, чтобы показать поршень (T), и символ downPiston, чтобы показать пустую нижнюю камеру (символ пробела).
ii. Если цилиндр также стреляет, измените значение камеры на звездочку, а метку состояния-на " P " (мощность)
ВИ. Используйте маску положения для определения состояния выпускного клапана текущего цилиндра. Если открыто (1), измените представление символов outValve на ‘o’ и установите метку состояния на ‘E ' (Exhaust).
VII. Измените символы в строках отображения, чтобы они соответствовали состоянию этих переменных.
Повторите процедуру для каждого из четырех цилиндров.
9. когда все четыре состояния цилиндра были вычислены, используйте поток cout для отображения каждой из шести строк дисплея в отдельной строке, за которой следуют две пустые строки.
10. чтобы перейти к следующему в порядке стрельбы, выполните одно и то же двоичное вращение каждой из четырех переменных состояния, в зависимости от текущего состояния cylinderFire следующим образом:
I. используя битовую маскировку, определите количество битов для поворота влево в зависимости от текущего стреляющего цилиндра.
II. Если у cylinderFire установлен бит 3 (в настоящее время стреляющий цилиндр 3), Вращение 1 бита влево сделает цилиндр 2 следующим цилиндром для стрельбы.
III. Если в данный момент стреляет цилиндр 4, то вращение 3 бит влево приведет к срабатыванию цилиндра 1.
IV. В противном случае, если в данный момент стреляют цилиндры 1 или 2, вращение 2 бит влево приведет к срабатыванию цилиндра 3 или 4 соответственно.
V. Поверните каждую из четырех двоичных переменных состояния на одинаковую величину, вызвав функцию rotate, которую мы создали ранее.
ВИ. Повторите тот же процесс пять раз, так что мы закончим в том же состоянии для каждого цилиндра, как мы начали.
11. сравните вашу рабочую программу с выводом ниже и выполните отладку по мере необходимости для достижения того же результата. Если все работает правильно, то вывод должен выглядеть примерно так:
Что я уже пробовал:
нет, я не пробовал, потому что не могу правильно понять этот вопрос.