0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 153
|
|
1 | |
В числе 15 поменять местами младший и старший байты07.04.2010, 16:33. Показов 21656. Ответов 24
Метки нет (Все метки)
Здравствуйте всем
объясните пожалуйста как например в числе 15 поменять местами младший и старший байты (Я Си изучаю только два дня) Добавлено через 8 минут Переменная типа int
0
|
07.04.2010, 16:33 | |
Ответы с готовыми решениями:
24
Поменять местами старший и младший полубайты Поменять местами старший и младший полубайт беззнакового короткого целого Поменять местами старший и младший байты в записи числа Для заданного целого А поменять местами старший и младший байты |
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||
07.04.2010, 16:39 | 2 | |||||
Сообщение было отмечено Памирыч как решение
Решение
3
|
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 153
|
|
07.04.2010, 16:41 [ТС] | 3 |
Спасибо большое за код
0
|
0 / 0 / 1
Регистрация: 29.03.2010
Сообщений: 25
|
|
03.07.2010, 13:20 | 4 |
на c++ можете написать плиз?
0
|
03.07.2010, 15:14 | 5 | |||||
Вот, правда сугубо С++'ного здесь ничего нет (кроме cout), делает то же самое,только совершенно другим способом.
2
|
0 / 0 / 1
Регистрация: 29.03.2010
Сообщений: 25
|
|
03.07.2010, 19:56 | 6 |
поясни плиз что происходит, а способ как раз то что нужно, через смещения)
0
|
04.07.2010, 07:14 | 7 |
Код получился не универсальный, как хотелось бы.(если int будет 2 байта, то результат будет не правильный) Я это заметил уже после того как код выложил, пробовал переписать, но получился быдлокод) Но при int==4 байта(чаще всего так и есть) - все правильно.
Главная часть кода основывается на смещении и логических опреациях "И" и "ИЛИ", попробую объяснить "на пальцах" Сначало высчитываем n (размер (int-1)*8 - в битах), оно нужно для сдвигов влево и вправо таким образом, чтоб крайний слева(справа) байт стал крайним справа(слева). Далее есть число (hex) 12345678, двигаем влево, получается 78000000, двигаем вправо, получается 00000012. Делаем "ИЛИ" этих двух чисел, получается 78000012, таким образом мы поменяли местами крайний левый и крайний правый байты, нужно заполнить середину. Для этого нужно подготовить маску для операции "И", для этого используем цикл (вот он то как раз не универсален, т.к. если int будет равен 2 байта, то маска получится FF00, что не есть правильно), при int = 4 байта получаем маску 00FFFF00 ( в двоичном виде 000000001111111111111111111111111111111100000000)), делаем VAL & маска, получается 00345600, т.е. середина нашего числа, а крайние байты = 0. Ну и последние это 78000012 "ИЛИ" 00345600, получается 78345612. Вот собственно и все)
1
|
04.07.2010, 09:04 | 8 | |||||
Kastaneda, я не понял зачем цикл
1
|
04.07.2010, 09:27 | 9 |
Ну да, можно и так, а цикл - это попытка (как я уже писал - неудачная) сделать код универсальным, на случай если int = 2 байта. А по поводу знаковое\беззнаковое, то в данном случае по-моему нет ни какой разницы. Задача же в том, чтобы поменять местами первый и последний байты, и не зависимо от старшего бита (т.е. знака) этот код будет делать свое дело)
0
|
04.07.2010, 14:50 | 10 |
универсальность тоже не везде нужна, зачем городить. для других размеров числа легче переписать функцию. ну а если попытаться, то... надо подумать.
а про беззнаковость это я на будущее
0
|
0 / 0 / 1
Регистрация: 29.03.2010
Сообщений: 25
|
|
04.07.2010, 19:22 | 11 |
а если мне надо любое вводимое число, а не 15? то как изменить код
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
04.07.2010, 19:29 | 12 |
Разница есть при сдвиге знакового числа влево. Если старший бит установлен, то после сдвига на k бит старшие k бит числа будут установлены, если не установлен - сброшены.
0
|
0 / 0 / 1
Регистрация: 29.03.2010
Сообщений: 25
|
|
04.07.2010, 20:48 | 13 |
а как сделать чтобы было не 15, а любое число, которое я введу?
0
|
0 / 0 / 1
Регистрация: 29.03.2010
Сообщений: 25
|
|
04.07.2010, 20:54 | 15 |
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
04.07.2010, 21:07 | 16 |
0
|
0 / 0 / 1
Регистрация: 29.03.2010
Сообщений: 25
|
|
04.07.2010, 21:12 | 17 |
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
04.07.2010, 21:16 | 18 | |||||
2 оно и в Африке 2. Ввод добавь.
0
|
0 / 0 / 1
Регистрация: 29.03.2010
Сообщений: 25
|
|
04.07.2010, 21:28 | 19 |
это вся прога Оо
0
|
04.07.2010, 21:37 | 20 | |||||
0
|
04.07.2010, 21:37 | |
04.07.2010, 21:37 | |
Помогаю со студенческими работами здесь
20
Поменять местами младший и старший байты в двоичном представлении десятичного числа Как в четырехбайтовом числе поменять местами старший и младший байт? Выделить младший и старший байты из двухбайтового целого В каждом четном числе поменять местами младший байт со старшим Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |