Здравствуйте!
Я использую сторонний прибор и через шлюз вывожу температуру.
С положительными значениями проблем нет.
А вот как вывести отрицательное значение?
Можно выбрать формат данных только unsigned.
Вид для печати
Здравствуйте!
Я использую сторонний прибор и через шлюз вывожу температуру.
С положительными значениями проблем нет.
А вот как вывести отрицательное значение?
Можно выбрать формат данных только unsigned.
Число в формате INT будет выводится отрицательные значения если оно имеет отрицательные значения
в дополнительном коде . Смотри в картинках .
Но есть подводный камень ФИЧА ( может уже исправили ) двойное преобразование --получает нормально , а из архива опять преобразует и результат иногда -1 получается 65535 (FFFF или 1111 1111 1111 1111) и т.д..
Вложение 44253 Вложение 44254
Пока не проверял исправили или нет ---- температуры положительные на улице.
спасибо разобрался , пришлось добавить 11111111 в старшие разряды
Это в прямом коде положительные и отрицательные числа отличаются только значением бита в старшем разряде! В дополнительном коде, что там присутствует, это не так, там как бы, в отличии от прямого кода, отрицательные значения в "перевёрнутом" виде!
Можно Овен попросить в настройки добавить дополнительно к знаковым целочисленным типам данных применяемый код(дополнительный, прямой, обратный), надеюсь понятно рассказал!
https://ru.wikipedia.org/wiki/Дополнительный_код
https://ru.wikipedia.org/wiki/Прямой_код
https://ru.wikipedia.org/wiki/Обратный_код
https://ru.wikipedia.org/wiki/Целое_(тип_данных)
Не совсем . Если вы хоть раз начали пользоваться двоичной арифметикой ( а не десятичной как мы пользуемся ) вы бы осознали
что -1 это 1111 1111 1111 1111 , а 1 это 0000 0000 0000 0001 --- а теперь сложите .
и получите 0000 0000 0000 0000 . Как и должно быть . И нечего мудрить . Во многих системах и языках очень много форматов данных,
но это лишь для оптимизации памяти хранения и скорости вычисления . Мне так кажется . :)
Да понятно, я считывал температуру с датчика ds18b20 ,получался обратный код но 8 разрядов . К примеру -3 получалось 1111 1100 .Я и передавал 0x00FC . И отображалось число 252 . А сейчас передаю 0xFFFC и теперь отображается всё правильно -3.
Мудрить не стоит, но я же даже ссылку дал, можете почитать, зачем применяют тот или иной код, его преимущества и недостатки тоже можно изучить, этого никто не запрещает, а я даже советую, для этого и ссылку дал!
Речь шла, во всяком случае до этого, об отображении, Вы говорите, по сути, к чёрту отображение, давайте лучше отнимем(сложим), найдём разность или сумму, какая здесь связь?
У Вас наверно обратный код, надо переделать в дополнительный, тогда должно всё правильно отображаться!
Предположу и другой вариант, на мой взгляд, более предпочтительный: возможно Вы не совсем точно посмотрели и "-3" в двоичном виде выглядит так: 1111 1101, тогда у вас дополнительный код и надо всего лишь преобразовать для 16 битной переменной, если нет такого типа данных(такой размерности) в облаке!
Ранее в разговоре с представителями Овен они заверяли, что там(в облаке) есть все необходимые типы данных, что меня очень удивило, но я поспорить не мог, так как никогда не имел дела с ихним облачным сервисом, есть надежда, что практика это поправила и не всё у них(как обычно) предусмотрено!
Если второй вариант, то так можно преобразовать:
Вложение 44285
Вложение 44286
В этом и проблема, что число однобайтовое, для двухбайтового в облачном сервисе есть тип данных INT16, а для однобайтовых знаковых чисел(INT8) нет такого типа данных в облачном сервисе Овена, хотя в природе существует! Вероятно такое будет редко встречаться, поэтому Овен счёл это ненужным!
И невозможно с INT8(числа от "-128" до 127) обращаться как с INT16 даже уже потому, что весь его диапазон кодов(0-255) будет лежать в области положительных значений INT16!