Прошу прощения за бестолковый вопрос.
Немного теории...
Как отличить знаковое INT от беззнакового INT в двоичной системе исчисления?
Пример:
число 5 в двоичной системе записывается как 101.
число -5 в двоичной системе записывается как 1111 1011 (побитно инвертируется и прибавляется единица)
Но: число 251 выглядит в двоичной системе так же как и число -5: 1111 1011
Как определить какое число записано -5 или 251? Что-то я не догоняю...
[?] основы двоичной системы исчисления
-
- Posts: 149
- Joined: Sun Dec 20, 2009 1:30 pm
- Location: Russia
-
- Site Admin
- Posts: 1122
- Joined: Wed Sep 06, 2006 12:03 pm
- Location: CIS
Re: [?] основы двоичной системы исчисления
Все зависит от того, как вы число интерпретируете. Например, у беззнакового числа размером 1 байт диапазон значений будет 0..255, а у знакового -128..127. Но различных значений и в том, и в другом случае будет 256.dmitry_79 wrote:Как определить какое число записано -5 или 251? Что-то я не догоняю...
Представление целых чисел в беззнаковых целых типах.
Для беззнакового представления все разряды ячейки отводятся под представление самого числа. Например, в байте (8 бит) можно представить беззнаковые числа от 0 до 255. Поэтому, если известно, что числовая величина является неотрицательной, то выгоднее рассматривать ее как беззнаковую.
Представление целых чисел в знаковых целых типах.
Для представления со знаком самый старший (левый) бит отводится под знак числа, остальные разряды - под само число. Если число положительное, то в знаковый разряд помещается 0, если отрицательное - 1. Например, в байте можно представить знаковые числа от -128 до 127.
-
- Site Admin
- Posts: 3992
- Joined: Thu Feb 16, 2006 3:25 pm
- Location: Russia
Re: [?] основы двоичной системы исчисления
Вообще у тебя в вопросе уже подвохdmitry_79 wrote:Как отличить знаковое INT от беззнакового INT в двоичной системе исчисления?
Если дело качается аналоговых входов/выходов то там всегда подразумевается знаковое INT.Как отличить знаковое INT от беззнакового WORD в двоичной системе исчисления?
Если встречаешь внутри программы, то обращай внимание на используемые команды:
I+, I- - значит INT
AW W#16#0FFF - большая вероятность WORD
-
- Posts: 149
- Joined: Sun Dec 20, 2009 1:30 pm
- Location: Russia
Re: [?] основы двоичной системы исчисления
Т.е. я правильно понимаю: если тип данных INT то всегда подразумеваается знаковое?CoMod wrote:Вообще у тебя в вопросе уже подвох
Но ведь значение INT больше 32767 впринципе ошибки не вызывает? Или это уже тип данных WORD?
-
- Site Admin
- Posts: 3992
- Joined: Thu Feb 16, 2006 3:25 pm
- Location: Russia
Re: [?] основы двоичной системы исчисления
оно автоматом представляется в DINT = двойной 32-х разрядный INT.dmitry_79 wrote:Т.е. я правильно понимаю: если тип данных INT то всегда подразумеваается знаковое?CoMod wrote:Вообще у тебя в вопросе уже подвох
Но ведь значение INT больше 32767 в принципе ошибки не вызывает? Или это уже тип данных WORD?
Системы программирования с контролем типов выдают ошибку при попытке использования неправильных значений.
А системы без контроля типов проглатывают ошибку и спутник получает правое вращение вместо левого - типичная ошибка для С.
-
- Posts: 501
- Joined: Tue Jun 27, 2006 5:52 am
- Location: Russia
Re: [?] основы двоичной системы исчисления
В 15-бите хранится информация о знаке:dmitry_79 wrote:Т.е. я правильно понимаю: если тип данных INT то всегда подразумеваается знаковое?
1 - минус
0 - плюс
Диапазон от -32768 … +32767.
"Правила синтаксиса в STEP7 обеспечивают спецификацию целых значений (INT) только в десятичном (decimal) формате представления" Курс ST-7PRO1
Безнаковое значение целого только в шестнадцатеричной форме 0 … 65535
Вроде, это правило в STEP7 распространяется только на константы.CoMod wrote:оно автоматом представляется в DINT = двойной 32-х разрядный INT.
-
- Site Admin
- Posts: 1122
- Joined: Wed Sep 06, 2006 12:03 pm
- Location: CIS
Re: [?] основы двоичной системы исчисления
Попробую объяснить на пальцахdmitry_79 wrote:Т.е. я правильно понимаю: если тип данных INT то всегда подразумеваается знаковое?
Но ведь значение INT больше 32767 впринципе ошибки не вызывает? Или это уже тип данных WORD?
Тип INT и тип WORD занимают 2 байта (16 бит), могут принимать значения от 0000 0000 0000 0000 до 1111 1111 1111 1111. Если данные рассматривать как INT, то диапазон возможных значений от -32768 до 32767, если как WORD - то от 0 до 65535 (0xFFFF). К одной и той же ячейке можно обращаться и как к WORD, и как к INT.
При добавлении к INT, равному 32767, получим переполнение - в ячейке будет -32768.
-
- Posts: 149
- Joined: Sun Dec 20, 2009 1:30 pm
- Location: Russia
Re: [?] основы двоичной системы исчисления
Дело как раз их и касаетсяCoMod wrote:...Если дело качается аналоговых входов/выходов то там всегда подразумевается знаковое INT.
Тогда получается нельзя подключать напрямую выход LMN_PER , PID регулятора FB41 напрямую к PQW1? Он (выход регулятора) имеет тип данных WORD, а на аналоговый модуль вывода, насколько я понимаю, всегда нужно подавть INT (-32768...32767 - диапазон зависит от битности модуля) . Потому-что исходя из вышесказанного может возникнуть переполнение?Schtiel wrote:При добавлении к INT, равному 32767, получим переполнение - в ячейке будет -32768.
Если я прав, то получается нужно как-то преобразовывать значения беззнакового INT (WORD) к знаковому INT? (имеется ввиду приводить диапазон значений 0...65535 к диапазону -32768...32768)
Или я не прав, и по этому поводу заморачиваться не слудует: смело подключать напрямую?
Совсем что-то запутался....
Last edited by dmitry_79 on Wed Mar 10, 2010 9:56 am, edited 1 time in total.
-
- Posts: 149
- Joined: Sun Dec 20, 2009 1:30 pm
- Location: Russia
Re: [?] основы двоичной системы исчисления
О! Наверное дошло до меня: FB41 пишет значение выхода как WORD, а модуль вывода читает это значение как INT. И никаких конфликтов с диапазонами не возникает.
Правильно?
Правильно?
-
- Site Admin
- Posts: 1122
- Joined: Wed Sep 06, 2006 12:03 pm
- Location: CIS
Re: [?] основы двоичной системы исчисления
Можно. ПИД-регулятор масштабирует выходное значение LMN_PER в диапазон 0..27648, переполнение не может возникнуть.dmitry_79 wrote:Тогда получается нельзя подключать напрямую выход LMN_PER , PID регулятора FB41 напрямую к PQW1?