2013-03-22 5 views
0

У меня есть, вероятно, простой вопрос, который я просто не могу понять.Анализ синтаксических данных

Я создаю сериализатор для регистратора данных, который отправляет последовательный поток. В документации к продукту указан расчет, который я не понимаю.

Lateral = Data1 And 0x7F + Data2/0x100 
If (Data1 And 0x80)=0 Then Lateral = -Lateral 

Что Data1 И 0x7f средства? Я знаю, что 7F - 127, но кроме того, я не понимаю комбинацию с утверждением А.

Как выглядит настоящая формула?

+0

Это побитовое - и для того, чтобы верхний бит в октете был * clear * для этой части выражения. Для чего стоит логика для второй строки, не совсем правильная, если целью является соблюдение знакового бита в 8-битном слоте Data1. – WhozCraig

ответ

1

Побитовое И - бит на выходе устанавливается тогда и только тогда, когда соответствующий бит установлен в как входы.

Поскольку ваши теги указывают, что вы работаете на C, вы можете выполнить побивовое И с оператором &.

(Обратите внимание, что 0x7F является 01111111 и 0x80 в двоичной 10000000, так что операции AND с ними соответствуют соответственно экстракции нижних семь бит и извлечения верхней бит байта.)

+0

Благодарим за ваши очень быстрые ответы, я только что немного прочитал о поразрядном И, и это имеет значение для меня. Является ли «Data1» только что подписанным 1 (true), если у него есть данные или как это следует понимать? Спасибо! – MadsChristiansen

0

1 предложение Lateral = Data1 And(&) 0x7f + Data2/ 0x100

означает принять величину Data1 (Data и 0x7F) и добавить к нему значение Data2/256

2 предложения проверки знак ода Data1 и присвоить то же самое Lateral.

+0

Аранжировка, которая делает идеальный смысл, спасибо вам всем! – MadsChristiansen

Смежные вопросы