реклама на сайте
подробности

 
 
> Поясните где неправ, при использовании поразрядного сдвига
kolobochishe
сообщение Feb 16 2012, 11:55
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Восстанавливаю из побайтового массива 4-х разрядную переменную

Это работает

Код
RS_Info->TotalAmp = DataArr[10032]*0x1000000 +
                      DataArr[10033]*0x10000 +
                      DataArr[10034]*0x100  +
                      DataArr[10035];


Это не работает

Код
RS_Info->TotalAmp = ((unsigned int)DataArr[10032])<<24 +
                                 ((unsigned int)DataArr[10033])<<16 +
                                 ((unsigned int)DataArr[10034])<<8 +
                                 ((unsigned int)DataArr[10035]);


Вопрос: Почему второй вариант оставляет 0 ?
RS_Info - указатель на структуру. TotalAmp - unsigned int поле.

Сообщение отредактировал kolobochishe - Feb 16 2012, 11:58
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kolobochishe
сообщение Feb 16 2012, 12:15
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



void GetRSInfo(struct RSInfo * RS_Info, unsigned char * DataArr)

Ноль оставляет в значении поля TotalAmp в случае если использую сдвиг.
Go to the top of the page
 
+Quote Post
xemul
сообщение Feb 16 2012, 12:52
Сообщение #3



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(kolobochishe @ Feb 16 2012, 16:15) *
Ноль оставляет в значении поля TotalAmp в случае если использую сдвиг.

Не устраивайте замес из арифметических и битовых операторов (или разруливайте замес скобками).
Код
RS_Info->TotalAmp = DataArr[10032]*0x1000000 + DataArr[10033]*0x10000;
RS_Info->TotalAmp = DataArr[10032]<<24 | DataArr[10033]<<16;
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 16:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01355 секунд с 7
ELECTRONIX ©2004-2016