Hexadecimální čísla - záporná   zodpovězená otázka

VB.NET

Zdravím,

používám VB2008 EE pro vyhodnocování údajů venkovního teploměru a narazil jsem na problém při zobrazování záporných teplot. Teploměr posílá hodnotu jako dva byty.(např. 02h, 3Ah představuje 17,8°C) Nějak jsem asi chyběl ve škole ale teorie záporných hex čísel prostě neznám. Nebo nemá někdo nějakech fígl ?

Díky

Jan

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A co posílá teploměr,když je teplota záporná?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A jak děláte převod nyní? Přece 02h 3Ah není ekvivalent čísla 17,8 (resp. 64,04, pokud to dáte ve Fahrnheitech, ve kterých také může být výstupní signál teploměru kalibrován, nebo 290,95, bude-li se jednat o Kelviny).

A asi těžko bude při teplotě 0°C mít výstupní signál hodnotu 00h 00h.

Jinak nevím, nakolik se to v praxi používá, ale v jiných číselných soustavách se pro záporná čísla používá stejná notace, jako pro kladná, pouze první bite nejvyššího byte se používá jako příznak pro znaménko. Ale stejně si myslím, že toto nebude Váš problém, že teploměr nebude posílat žádné "záporné výstupy", protože jemu je naše teplotní nula šuma fuk. Záleží ale na konstrukci teploměru a odkud je vlastně ten výstupní signál generován.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Co posílá teploměr na PC dnes když mrzne nevím. Dostávám jen hlášení o výsledné teplotě po internetu. Teplota se počítá "(256*vyšší byte + nižší byte)/konstantou = výsledek v °C"

Myslím, že záporné číslo bude značeno tím prvním bitem. Můžete to rozvést nebo navést kde bych to našel ?

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Když víte, že 17,8°C je reprezentováno 02h,3Ah, tak proč nemůžete zjistit, jak tento teploměr reprezentuje dnešní mínusové hodnoty?

A ten algoritmus výpočtu teploty jste získal z nějaké dokumentace? (pak by tam mohla být i zmínka o těch teplotách záporných.

Jak psal kolega, těch způsobů zápisu může být více, proto by bylo potřeba zjistit ajespoň nějaký "záporný" údaj z teploměru. Pokud ho zjistíte, dal by se algoritmus odvodit (důležité je, že víte, že měření teploty vychází ze °C, takže by se mělo dále jednat o lineární problém a měla by tudíž stačit jedna záporná hodnota. Pokud se ale k údajům nemůžete dostat, souhlasím s tím, že by bylo nejlépe začít na stránkách výrobce - má-li teploměr datový výstup, nepředpokládám, že by se nikde nenašel popis datového protokolu).

P.S. příklad, jak se zapisují záporná čísla naleznete třeba tady http://www.gymnazium.milevsko.cz/dokumen... - na poslední stránce máte ukázku celkem 3 notačních způsobů tak, jak je popisoval kolega.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Kromě jedničky v prnvím bitu zleva se záporné číslá získá inverzí a anebo jako doplněk, což je inverze + 1 - je tedy možností víc. Samo zařízení může mít k převodu vlastní algoritmus.

A kde hledat - no, přece na Internetu a najdete stovky vysvětlení a zkusil bych hledat i stránky výrobce zařízení

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky, to stím internetem by mne nenapadlo:-)

Nějak jsem to obešel. Nenašel jsem ve VB jak negovat binární číslo v jedničkách a nulách.

Tak že ještě jednou díky, budu pracovat na svých pokusech a omylech.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Negace je velice jednoduchá, pomocí NOT:

dim a,negace_a as byte ' (uint16, ...)

a=16             ' = 00010000
negace_a= NOT a  ' = 11101111 (=239)

P.S., pokud dáte jako typ proměnné Sbyte, Int16 ... (jakoukoliv znaménkovou variantu), dostanete přímo -17 (což má stejné bitové vyjádření)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jednoduché a funkční. Prostě genialní.

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback