Зеркально поменять местами разряды младшего байта каждого числа - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. 1)Зеркально поменять местами разряды младшего байта каждого числа. 2)В тексте поменять местами первую и вторую половины каждого слова. Все слова в тексте состоят из четного числа букв. В тексте несколько строк.

Решение задачи: «Зеркально поменять местами разряды младшего байта каждого числа»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
int main ()
{
 
unsigned  ishodnoe_chislo=0, kopija_ishodnogo_chisla;
unsigned  kolichestvo_sdviga_vpravo=0,kolichestvo_sdviga_vlevo=0;
unsigned  starshij_bajt, mladshij_bajt, a=0, left=7, right=0,result=0,kopija_mladshego_bajta, seredina_stroki;
char str[80], substr1[80]="",substr2[80]="";
 
//clrscr();
 
//ПРЕОБРАЗОВАНИЕ ЧИСЛА . Здесь число должно быть от 0 до 65536 , т. е. не более 2-х байтов занимать**********************
 
printf("Vvedite 4islo:  ");
scanf("%u", &ishodnoe_chislo);
printf("dano: %u", ishodnoe_chislo);
kopija_ishodnogo_chisla=ishodnoe_chislo;
starshij_bajt  =ishodnoe_chislo & 65280;
 
ishodnoe_chislo = kopija_ishodnogo_chisla;
mladshij_bajt=ishodnoe_chislo & 255;
 
printf("\nstarshij_byte: %u", starshij_bajt);
printf("\nmladshij_byte: %u", mladshij_bajt);
 
kopija_mladshego_bajta=  mladshij_bajt;
 
    for (int i=1;i<8;i++)
    {
    mladshij_bajt=mladshij_bajt>>right; // убираем справа ненужные
    mladshij_bajt=(mladshij_bajt<<7) ; // убираем слева ненужные
    mladshij_bajt=mladshij_bajt&255; // отсекаем слева ненужные (которые за границей байта)
    mladshij_bajt=mladshij_bajt>>right;// подводим этот бит туда, куда будем его вставлять
    result=result|mladshij_bajt; // бит вставляем куда надо 
    left--;
    right++;
    mladshij_bajt=kopija_mladshego_bajta;
//  printf("\nresult %d : %x",i, result);
    }
 
    printf("\nResulting variable: %u\n", starshij_bajt|result);
 
//КОНЕЦ ПРЕОБРАЗОВАНИЯ ЧИСЛА*********************************************************************************************
 
 
 
 
//ПРЕОБРАЗОВАНИЕ СТРОКИ (Строка обязательно должна содержать четное количесвто символов)***************************
 
printf("\nVvedite stroku(4etnoe kol-vo simvolov):  ");
scanf("%s", &str);
 
seredina_stroki=strlen(str)/2;
 
memcpy(substr1,str,seredina_stroki);
 
    while (str[seredina_stroki])
    {
    substr2[a]=str[seredina_stroki];
    a++;
    seredina_stroki++;
    }
 
strcat(substr2,substr1);
 
printf("Resulting string: %s", substr2);
 
// КОНЕЦ ПРЕОБРАЗОВАНИЯ СТРОКИ*******************************************************************************
 
 
getch();
return 0;
    }

Объяснение кода листинга программы

Вот что делает этот код:

  1. Преобразует введенное четырехзначное число в его двоичный эквивалент.
  2. Получает два байта из числа.
  3. Перемещает биты младшего байта вправо и старшего байта влево, сохраняя при этом биты младшего байта.
  4. Объединяет полученные биты с исходным числом.
  5. Запрашивает строку с четным количеством символов.
  6. Находит середину строки.
  7. Копирует символы из середины строки в новую строку.
  8. Добавляет символы из исходной строки в новую строку.
  9. Выводит полученную строку.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы