Hoe weet ik of de hexadecimale waarde negatief is?

Ik heb zojuist geleerd hoe ik hexadecimale waarden moet lezen. Tot nu toe las ik ze alleen als positieve getallen. Ik heb gehoord dat je ook negatieve hexadecimale waarden kunt schrijven.

Mijn probleem is dat ik niet kan zien of een waarde negatief of positief is.
Ik heb hier en daar een paar verklaringen gevonden, maar als ik ze probeer te verifiëren door online hex naar decimale converters te gebruiken, krijg ik altijd andere resultaten.

Bronnen die ik heb gevonden:
https://stackoverflow.com/a/5827491/5016201
https://coderanch.com/t/246080/java -programmer-OCPJP/certificering/Negatief-hexadecimaal getal

Als ik het goed begrijp, betekent dit dat:
Als een hexadecimale waarde is geschreven met al zijn bits die iets hebben > 7 als eerste hexadecimaal cijfer, is het negatief.
Alle ‘F’ aan het begin of het eerste cijfer betekent dat de waarde negatief is en niet wordt berekend.

Als de hex-waarde bijvoorbeeld in 32 bits is geschreven:
FFFFF63C => negatief ( -2500 ?)
844fc0bb => negatief ( -196099909 ?)
F44fc0bb => negatief ( -196099909 ?)
FFFFFFFF => negatief ( -1 ?)
7FFFFFF => positieve

Heb ik gelijk? Zo niet, kunt u mij dan vertellen wat ik niet goed begrijp?


Antwoord 1, autoriteit 100%

Lees meer over de weergave van Two’s complement: https://en.wikipedia.org/wiki/Two %27s_complement

Ik denk dat de gemakkelijkste manier om te begrijpen hoe negatieve getallen (meestal) worden behandeld, is door een klein binair getal op te schrijven en vervolgens uit te zoeken hoe je het met één kunt aftrekken. Wanneer je 0 bereikt en die methode nogmaals toepast, zul je zien dat je plotseling allemaal 1’en krijgt. En zo wordt “-1” (meestal) weergegeven: alle enen in binair of alle f’s in hexadecimaal. Als u met ondertekende getallen werkt, worden deze gewoonlijk weergegeven door het eerste (meest significante) bit dat één is. Dat wil zeggen dat als je met een aantal bits werkt dat een veelvoud van vier is, een getal negatief is als het eerste hexadecimale cijfer 8,9,A,B,C,D,E of F is.

De methode om ontkenning te doen is:

  1. alle bits omkeren
  2. voeg 1 toe

Een ander voordeel van deze weergave (twee-complement) is dat je slechts één weergave voor nul krijgt, wat niet het geval zou zijn als je ondertekende nummers markeert door de MSB in te stellen of ze gewoon om te keren.


Antwoord 2, autoriteit 53%

Voor zover ik heb begrepen, moet je altijd naar het meest linkse cijfer kijken om het teken te herkennen. Indien in hex, dan is alles van 0-7 positief en 8-f negatief. Als alternatief kunt u van hex naar binair converteren, en als er een 1 in het meest linkse cijfer staat, is het getal negatief.

HEX <-> BINAIRE <-> TEKEN
0-7 <-> 0000-0111 <-> pos
8-F <-> 1000-1111 <-> neg


Antwoord 3, autoriteit 21%

Het antwoord hier in het forumziet er goed uit:

Elk hexadecimaal “cijfer” is 4 bits. De d in de hoge orde positie
is 1101. Dus je ziet dat het een hoog deel van één heeft, dus het geheel
getal is negatief.

en

Een hexadecimaal getal is altijd positief (tenzij u specifiek een minteken plaatst)
teken ervoor). Het kan worden geïnterpreteerd als een negatief getal
zodra u het in een bepaald gegevenstype opslaat. Alleen dan doet het meeste
significante bit (MSB) doet ertoe, maar het is de MSB van het getal “as
opgeslagen in dat gegevenstype”. In dat opzicht zijn de bovenstaande antwoorden alleen:
gedeeltelijk correct: alleen in de context van een daadwerkelijk gegevenstype (zoals een
int of a long) maakt de MSB uit.

Als u “0xdcafe” opslaat in een int, zou de weergave ervan zijn
“0000 0000 0000 1101 1100 1010 1111 1110” – de MSB is 0. Terwijl de
weergave van “0xdeadcafe” is “1101 1110 1010 1101 1100 1010 1111
1110” – de MSB is 1.


Antwoord 4

Je kunt zien of een hexadecimaal geheel getal positief of negatief is door het meest significante (hoogste) cijfer te inspecteren. Als het cijfer ≥ 8 is, is het getal negatief; als het cijfer ≤ 7 is, is het getal positief. Hexadecimaal 8A20 is bijvoorbeeld negatief en 7FD9 is positief

Other episodes