Битовые операции - C (СИ) (148905)
Формулировка задачи:
Почему то ничего красивого в голову не приходит. Помогите написать на C
На Verilog
где out[i], in[i] - i-ые биты
out[0] = in[7];
out[1] = in[0] ^ in[7];
out[2] = in[1] ^ in[7];
out[3] = in[2];
out[4] = in[3];
out[5] = in[4];
out[6] = in[5];
out[7] = in[6];out, in
, ^ -XOR
Решение задачи: «Битовые операции»
textual
Листинг программы
out = ((in << 1) | (in >> 7)) ^ ((in >> 7) * 0x06);
Объяснение кода листинга программы
in- входное значение, вероятно, представляющее собой байт (8 бит).out- выходное значение, вероятно, также представляющее собой байт (8 бит).(in << 1)- сдвиг входного значения на 1 позицию влево. Это означает, что самый старший бит становится самым младшим, а второй старший бит становится старшим битом.(in >> 7)- сдвиг входного значения на 7 позиций вправо. Это означает, что самый младший бит становится самым старшим битом.|- операторлогическое ИЛИ, который возвращает 1, если хотя бы один из его операндов равен 1, и 0 в противном случае.(in >> 7) * 0x06- сдвиг входного значения на 7 позиций вправо, затем умножение на 0x06 (вероятно, это значение 6 в шестнадцатеричной системе счисления).^- операторисключающее ИЛИ, который возвращает 1, если только один из его операндов равен 1, и 0 в противном случае.(in << 1) | (in >> 7)- выражение, состоящее из сдвига на 1 позицию влево, сдвига на 7 позиций вправо, операциилогическое ИЛИи операцииисключающее ИЛИ.out- результат вычисления выражения, который будет сохранен в переменнойout.