如何判断十六进制值是否为负数?

aur*_*enC 8 hex

我刚学会了如何读取十六进制值.到现在为止,我只是把它们看作正数.我听说你也可以写负十六进制值.

我的问题是,我无法判断某个值是负数还是正数.我在这里和那里找到了一些解释,但如果我尝试使用在线的十六进制到十进制转换器来验证它们,它们总是给我不同的结果.

我找到的来源:
https ://stackoverflow.com/a/5827491/5016201
https://coderanch.com/t/246080/java-programmer-OCPJP/certification/Negative-Hexadecimal-number

如果我理解正确,则意味着:
如果用其所有位写入的十六进制值具有> 7作为其第一个十六进制数字,则为负数.
开头或第一个数字的所有"F"仅表示该值为负,不计算.

例如,如果十六进制值以32位写入:
FFFFF63C =>负(-2500?)
844fc0bb =>负(-196099909?)
F44fc0bb =>负(-196099909?)
FFFFFFFF =>负(-1?)
7FFFFFFF = >积极的

我对么?如果没有,你能告诉我我没有做对吗?

Dan*_*röm 14

阅读Two's补充表示:https://en.wikipedia.org/wiki/Two%27s_complement

我认为理解负数(通常)如何处理的最简单方法是写下一个小的二进制数,然后弄清楚如何减1.当你达到0并再次应用该方法时 - 你会看到你突然得到全1.这就是"-1"(通常)表示的方式:所有的二进制或所有f的十六进制.通常,如果使用带符号的数字,则它们由第一个(最重要的)位表示为1.也就是说,如果使用多个四位的位数,那么如果第一个十六进制数字是8,9,A,B,C,D,E或F,则数字为负数.

做否定的方法是:

  1. 反转所有位
  2. 加1

这种表示的另一个好处(两个补码)是你只得到一个零表示,如果你通过设置MSB标记有符号数或者只是反转它们就不会出现这种情况.

  • “虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分并提供链接以供参考。如果链接页面发生变化,仅链接的答案可能会变得无效。” (2认同)

Jes*_*sse 7

据我了解,您总是需要查看最左边的数字以告知该标志。如果为十六进制,则0-7的值为正,而8-f的值为负。或者,您可以从十六进制转换为二进制,如果最左边的数字为1,则数字为负。

十六进制<->二进制<->
符号0-7 <-> 0000-0111 <-> pos
8-F <-> 1000-1111 <-> neg