Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2016, 13:44   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Выражение для двобайтового числа Си

Добрый день. Прошу помочь, написать выражение для замены в двобайтовом целом числе А младшего байта на старший байт двобайтового целого числа В.
Код:
int main()
{
    unsigned int х=15;
    х= (х << 24) | (х & 0x00FFFF00) | (х >> 24); 
    std::cout << х;
    return 0;
}
Вероника99 вне форума Ответить с цитированием
Старый 14.10.2016, 14:07   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,317
По умолчанию

Не проверял:
Код:
a = (a & 0xFF00) | ((b >> 8) & 0xFF);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 14.10.2016, 14:12   #3
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

двУХбайтовые числа - это всякие word/short (или что там в с++, уже не помню), а int - 4 байта
НЕ усложняй решение, пытаясь влепить решение в одну строку..... введи hi и lo, запиши в них нужные части х, а потом скомпонуй новое х... да, это аж на 2 строки больше, но код станет понятнее и тебе самой станет проще найти проблемы (например, проверить корректность hi и lo)
GreenWizard вне форума Ответить с цитированием
Старый 14.10.2016, 15:30   #4
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Не проверял:
Код:
a = (a & 0xFF00) | ((b >> 8) & 0xFF);
А как правильно результат вывести?у меня при любых значениях результат 0, a и b типа short
Вероника99 вне форума Ответить с цитированием
Старый 14.10.2016, 16:37   #5
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Цитата:
Сообщение от Вероника99 Посмотреть сообщение
А как правильно результат вывести?у меня при любых значениях результат 0, a и b типа short
a и b - это х.... замени и должно работать
.............
хотя нет, там ошибка, нужно, вроде:
x = ((x << 8) & 0xFF00) | ((x >> 8) & 0xFF)

Последний раз редактировалось GreenWizard; 14.10.2016 в 16:41.
GreenWizard вне форума Ответить с цитированием
Старый 15.10.2016, 00:55   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,317
По умолчанию

http://ideone.com/oSzu7Z
Код:
#include <stdio.h>

int main(void) {
    short int a = 0x1234, b = 0x5678;
    a = (a & 0xFF00) | ((b >> 8) & 0xFF);
    printf("%x", a);
    return 0;
}
Вроде заменяет
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.10.2016, 02:18   #7
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
http://ideone.com/oSzu7Z
Код:
#include <stdio.h>

int main(void) {
    short int a = 0x1234, b = 0x5678;
    a = (a & 0xFF00) | ((b >> 8) & 0xFF);
    printf("%x", a);
    return 0;
}
Вроде заменяет
тьфу ты блин, меня сбил с толку код ТС и я решил, что задача в обмене байт одного числа, а там действительно должно быть два числа
GreenWizard вне форума Ответить с цитированием
Старый 15.10.2016, 05:59   #8
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Как же я люблю всякую шляпу:
Код:
//gcc 4.9.3

#include <stdio.h>
#include <stdint.h>


int main(void) {
	int16_t a = 0x1234, b = 0x5678;
    *((char*)&a) = *(((char*)&b)+1);
	printf("%x", a);
	return 0;
}
http://rextester.com/JCRFBB4877
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Арифметическое выражение. Решить квадратное уравнение и посчитать выражение, используя вычисленные корни. dauletsergazin Паскаль, Turbo Pascal, PascalABC.NET 4 13.11.2017 11:55
Регулярное выражение для Notepad++ zima55 Софт 4 17.01.2015 14:45
Написать выражение, проверяющее три числа a, b, c harvey Помощь студентам 3 11.10.2012 00:08
Регулярное выражение для Яндекса,кодировка Tepper PHP 4 19.09.2012 12:50
строковое выражение числа должно быть переведено в вещественный тип Wi1D Помощь студентам 8 09.02.2009 18:16