Зеркально поменять местами разряды младшего байта каждого числа - 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; }
Объяснение кода листинга программы
Вот что делает этот код:
- Преобразует введенное четырехзначное число в его двоичный эквивалент.
- Получает два байта из числа.
- Перемещает биты младшего байта вправо и старшего байта влево, сохраняя при этом биты младшего байта.
- Объединяет полученные биты с исходным числом.
- Запрашивает строку с четным количеством символов.
- Находит середину строки.
- Копирует символы из середины строки в новую строку.
- Добавляет символы из исходной строки в новую строку.
- Выводит полученную строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д