Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/117: Рейтинг темы: голосов - 117, средняя оценка - 4.88
 Аватар для Leshiy1
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 153

В числе 15 поменять местами младший и старший байты

07.04.2010, 16:33. Показов 23660. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте всем
объясните пожалуйста как например в числе 15 поменять местами младший и старший байты
(Я Си изучаю только два дня)

Добавлено через 8 минут
Переменная типа int
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.04.2010, 16:33
Ответы с готовыми решениями:

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

Поменять местами старший и младший полубайт беззнакового короткого целого
ребят, помогите Используя битовые операции, поменять местами старший и младший полубайт беззнакового короткого целого.

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

24
 Аватар для kirich iz Che
0 / 0 / 1
Регистрация: 29.03.2010
Сообщений: 25
04.07.2010, 21:56
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от fasked Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main()
{
   unsigned int dword;
   std::cin >>  dword;
 
   dword = (dword << 24) | (dword & 0x00FFFF00) | (dword >> 24);
 
   std::cout << dword;
}
вот теперь вся
о да.. клевые несколько строчек кода)
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
05.07.2010, 00:20
Цитата Сообщение от kirich iz Che Посмотреть сообщение
о да.. клевые несколько строчек кода)
а что ты еще хочешь?
0
 Аватар для kirich iz Che
0 / 0 / 1
Регистрация: 29.03.2010
Сообщений: 25
05.07.2010, 06:48
Цитата Сообщение от fasked Посмотреть сообщение
а что ты еще хочешь?
все хорошо, просто неожиданно короткл
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
10.07.2010, 21:03
Еще как вариант.
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
#include <iostream>
using namespace std;
 
//Функция обменивает байты в переданном блоке данных, номера байтов задаются третим и четвертым параметрами.                                                                                  */
long swap_bytes(void *buf, unsigned long size_b, unsigned long num_b1, unsigned num_b2);
int main(){
    int n=1022221113;
    cout<<n<<endl;
    swap_bytes(&n,sizeof(int),0,sizeof(int)-1);   //меняеться последний с первым.
    cout<<n<<endl;
return 0;
}
 
long swap_bytes(void *buf, unsigned long size_b, unsigned long num_b1, unsigned num_b2){
if(size_b<=1)return -1;              
if(num_b1==num_b2)return -2;         
if(num_b1>=size_b||num_b2>=size_b)return -3; 
char *p = ( char*)buf;   
//Обмен байт с номерами.
char tmp = p[num_b1];
p[num_b1] = p[num_b2];
p[num_b2] = tmp;
//----------------------
return 0;
}
0
0 / 0 / 0
Регистрация: 02.10.2018
Сообщений: 7
02.10.2018, 16:00
Возможно кто-нибудь меня поправит, данный вариант должен подойти к любому числу в пределах типа int (4 байта):
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
#include <stdio.h>
 
int main (void)
{
    int x, y, z, w;
    printf ("Введите любое число от -2 147 483 647 до 2 147 483 646 и я заменю младший и старший его байты:");
    scanf ("%d", &x);
    if (x >= 0)
    {
        /*Вычисляем младший байт числа путем деления числа по модулю %256.
        Затем вычисляем старший байт числа путем вычитания из самого числа (состоит из 4х байтов) - 3 (три) его предыдущий байта. 
        Чтобы вычислить 3 его предыдущих байта, делим число по модулю %16777216 (2 в 24 степени).
        Вычисляем средние его байты (2ой и 3ий) путем вычитания из начального числа - его старшего и младшего байтов.
        Для замены старшего и младшего байтов - совершаем операцию умножения младшего байта на 2 в 24 степени, и деления его старшего байта на 2 в 24 степени.
        Иначе можно произвести сдвиг >> 24 и << 24 соответственно. Но может быть зайдествовано не все 24 сдвига, а только 5, поэтому я умноюа на 2 в степени.
        Произвожу сложение младшего, старшего и средних байтов через побитовую операцию OR. */
        y = x%256;
        z = x - (x%16777216);
        x = (x-y) - z;
        printf ("ДО СМЕНЫ БАЙТОВ:\nСтарший байт равен %d\nМладший байт равен %d\nВторой и третий байт представляют собой %d\n\n", z, y, x);
        y = y * 16777216;
        z = z / 16777216;
        printf ("ПОСЛЕ СМЕНЫ БАЙТОВ:\nСтарший байт равен %d\nМладший байт равен %d\nВторой и третий байт представляют собой %d\n", z, y, x);
        w = y | z;
        x = x | w;
        printf ("Сумма старшего и младшего байтов равна %d\n\n", w);
        printf ("Ваше число теперь имеет вид %d", x);
    }
    else
    {
        /*Поскольку число отрицательное, то произвожу его инверсию. Вычисляю его младший байт делением по модулю %256,
        старший байт делением по модулю % 16777216 и средние байты - вычитанием из инвертированного числа - его младший и старшие байты.
        Переношу младший байт в адрес старшего путем умножения на 2 в 24 степени (иначе говоря сдвиг << 24).
        Переношу старший байт в адрес младшего путем деления на 2 в 24 степени (иначе говоря сдвиг >> 24).
        Произвожу сложение младшего, старшего и средних байтов через побитовую операцию OR.
        И возвращаю число путем инвертирования результата предыдущей операции.*/
        x = ~x;
        printf ("После инварсии:%d\n\n", x);
        y = x%256;
        z = x - (x%16777216);
        x = (x-y) - z;
        printf ("Старший байт равен %d\nМладший байт равен %d\nВторой и третий байт представляют собой %d\n\n", z, y, x);
        y = y * 16777216;
        z = z / 16777216;
        printf ("ПОСЛЕ СМЕНЫ БАЙТОВ:\nСтарший байт равен %d\nМладший байт равен %d\nВторой и третий байт представляют собой %d\n\n", z, y, x);
        w = y | z;
        printf ("Сумма старшего и младшего байтов равна %d\n\n", w);
        x = x | w;
        x = ~x;
        printf ("Ваше число теперь имеет вид %d", x);
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.10.2018, 16:00

Для заданного целого А поменять местами старший и младший байты
Помогите с заданием: Для заданного целого А поменять местами старший и младший байты. Вывести число А в шестнадцатеричной системе до и...

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

Как в четырехбайтовом числе поменять местами старший и младший байт?
Помогите пожалуйста! Как в четырехбайтовом числе поменять местами старший и младший байт

Выделить младший и старший байты из двухбайтового целого
Всем здравствуйте. Как выделить из UShort младший и старший байты? Если число записано в коде так: DEFF. Какой здесь байт младший, DE...

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


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru