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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2013, 21:55   #1
alexusankov
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 66
По умолчанию Побитовые операции

Здравствуйте. Прошу прощения, за еще одну тему. Но, слегка впадаю в затупление с самого утра.
Пытаюсь сделать элементарную вещь - впихнуть в ushort 2 байта. Вроде все просто.
Код:
byte a = 0xFF;
byte b = 0xFF;
ushort result = a;
ushort totalresult = (result << 8) + b;
Все просто - пихаю в двубайтовую переменную байт, сдвигаю влево на 8 разрядов и плюсую второй байт.
Результатом сего действа я наблюдаю ошибку не укладывающуюся в голове :
Код:
Не удается неявно преобразовать тип "int" в "ushort". Существует явное преобразование (возможно, пропущено приведение типов)
Не подскажете. в какую сторону гуглить?
alexusankov вне форума Ответить с цитированием
Старый 01.12.2013, 22:00   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

там на белом по русски написано что к чему, чего не понятно?
eval вне форума Ответить с цитированием
Старый 01.12.2013, 22:02   #3
alexusankov
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 66
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
там на белом по русски написано что к чему, чего не понятно?
Вроде все понятно. И как сдвинуть восемь бит влево?

Последний раз редактировалось alexusankov; 01.12.2013 в 22:05.
alexusankov вне форума Ответить с цитированием
Старый 01.12.2013, 22:22   #4
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Результатом всех целочисленных арифметических операций является тип, по размеру не меньше чем int. Даже если вы складываете 2 short'а, то результатом будет int. Соответственно, нужно явное преобразование обратно:

Код:
ushort totalresult = (ushort)((result << 8) + b);
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 01.12.2013, 22:27   #5
alexusankov
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 66
По умолчанию

Цитата:
Сообщение от Selestis Посмотреть сообщение
Результатом всех целочисленных арифметических операций является тип, по размеру не меньше чем int.
Ого, вот это поворот.
А если я не хочу два лишних байта?
Ценная информация, а я раньше не слышал о том, что результат целочисленных операция будет int.
Спасибо, помогли!
alexusankov вне форума Ответить с цитированием
Старый 01.12.2013, 22:37   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

в справку заглянули бы и вслушиваться не пришлось бы
eval вне форума Ответить с цитированием
Старый 01.12.2013, 22:38   #7
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Цитата:
А если я не хочу два лишних байта?
Именно поэтому и делается явное приведение типов) Вообще смысл в том, что процессор считает в int'ах, а не в шортах или байтах. Логично выдавать результат "как есть". Приведение же сделано явным, чтобы вы сами "подписались" под тем, что таки хотите избавиться от "лишних" двух байтов.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ побитовые операции Rus5 Помощь студентам 0 28.05.2013 22:34
С/С++, ПОБИТОВЫЕ ОПЕРАЦИИ. gopnikdj Помощь студентам 5 25.12.2012 18:29
побитовые операции Александе еть я Общие вопросы C/C++ 2 18.04.2010 13:31
побитовые операции Dimarik Общие вопросы C/C++ 7 16.04.2010 19:27
Побитовые операции WinterLord Общие вопросы C/C++ 1 12.10.2008 22:39