Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
3 / 3 / 0
Регистрация: 03.10.2011
Сообщений: 34

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

21.12.2012, 23:29. Показов 4432. Ответов 7
Метки нет (Все метки)

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

2)В тексте поменять местами первую и вторую половины каждого слова. Все
слова в тексте состоят из четного числа букв. В тексте несколько строк.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2012, 23:29
Ответы с готовыми решениями:

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

Разряды младшего байта числа
Здравствуйте, необходимо зеркально поменять разряды младшего байта каждого числа. Правильно ли я понимаю, что разряд - это бит. И...

Старший бит старшего байта поменять местами с младшим битом младшего байта
Ребят помогите прогу доработать. Задача такая: В одномерном массиве чисел целого типа (16 бит) выполнить следующую двоичную обработку с...

7
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
21.12.2012, 23:40
Цитата Сообщение от Nerchi Посмотреть сообщение
Доброго времени суток.
1)Зеркально поменять местами разряды младшего байта каждого числа.

2)В тексте поменять местами первую и вторую половины каждого слова. Все
слова в тексте состоят из четного числа букв. В тексте несколько строк.
Так а как оно должно быть? вводится строка слов в перемешку с числами и потом это преобразуется? или пользователь вводит то слово, то число, а система должна выдавать это в преобразованном виде?
0
3 / 3 / 0
Регистрация: 03.10.2011
Сообщений: 34
22.12.2012, 16:00  [ТС]
вводится строка слов в перемешку с числами и потом это преобразуется
0
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
23.12.2012, 00:41
Вот код первая часть которого преобразует число, а вторая часть строку. возможно можно было сделать более искуссно(интересно, кстати, посмотреть было бы варианты с финтами какими-то).
На VC++2008 и на Windows XP точно работает.

Чтобы увидеть двоичное представление числа, можете воспользоваться калькулятором в Виндовсе, очень удобно.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#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;
    }
Добавлено через 12 минут
Кстати, если вводится вперемешку , то тут получается что и числа нужно выделять из этого, затем преобразовывать ... короче мороки много ...
например вот здесь 2 байта (это строка): "99" , но вот здесь тоже 2 байта (беззнаковое целое): 65000 .... потому что-то думать нужно ...
хотя может и есть какие-то средства которые упрощают.

А вы уверены что именно такого уровня задание? может там будет достаточно ввести строку и число , затем их преобразовать? например перед вводом спросить у пользователя что именно он хочет преобразовывать.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
23.12.2012, 03:35
Цитата Сообщение от Nerchi Посмотреть сообщение
1)Зеркально поменять местами разряды младшего байта каждого числа.
C
1
2
3
4
5
6
7
8
9
10
uint32_t foo (uint32_t n)
{
    uint8_t res = (uint8_t) (n & 0xFF);
 
    res = (res >> 4) | (res << 4);
    res = ((res & 0xCC) >> 2) | ((res & 0x33) << 2);
    res = ((res & 0xAA) >> 1 ) | ((res & 0x55) << 1);
 
    return  (n & 0xFFFFFF00) | (uint32_t) res;
}
0
3 / 3 / 0
Регистрация: 03.10.2011
Сообщений: 34
23.12.2012, 08:59  [ТС]
Цитата Сообщение от CJS Посмотреть сообщение
Вот код первая часть которого преобразует число, а вторая часть строку. возможно можно было сделать более искуссно(интересно, кстати, посмотреть было бы варианты с финтами какими-то).
На VC++2008 и на Windows XP точно работает.

Чтобы увидеть двоичное представление числа, можете воспользоваться калькулятором в Виндовсе, очень удобно.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#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;
    }
Добавлено через 12 минут
Кстати, если вводится вперемешку , то тут получается что и числа нужно выделять из этого, затем преобразовывать ... короче мороки много ...
например вот здесь 2 байта (это строка): "99" , но вот здесь тоже 2 байта (беззнаковое целое): 65000 .... потому что-то думать нужно ...
хотя может и есть какие-то средства которые упрощают.

А вы уверены что именно такого уровня задание? может там будет достаточно ввести строку и число , затем их преобразовать? например перед вводом спросить у пользователя что именно он хочет преобразовывать.
да, такое. А возможно преобразование самого числа реализовать в коде?
0
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
23.12.2012, 12:33
Цитата Сообщение от Nerchi Посмотреть сообщение
А возможно преобразование самого числа реализовать в коде?
Что именно вы имеете в виду?
0
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
23.12.2012, 12:36
Вот сам проект
Вложения
Тип файла: rar FORUM_22_12_12.rar (276.4 Кб, 41 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2012, 12:36
Помогаю со студенческими работами здесь

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

Зеркально поменять местами разряды внутри старшего и младшего байтов каждого числа. (раздельная компиляция asm и C)
Сюда посылаю 16-битовое число. Как зеркально поменять местами разряды внутри старшего и младшего байтов числа? MASM. .686 .MODEL...

Поменять местами биты младшего байта каждого числа
Ребята выручайте! Долгов набрал все не успеваю! Написать прогу пользуюсь Lazarus Заранее благодарен! Поменять местами биты младшего...

В каждом байте числа зеркально поменять местами разряды
Задание: в одномерном массиве чисел целого типа (32 бит) выполнить следующую двоичную обработку. В каждом байте числа зеркально поменять...

Поменять местами биты младшего байта нечетных чисел
Помогите написать программу, нужно поменять местами биты младшего байта нечетных чисел. Старший байт оставить без изменений. После замены...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru