【发布时间】:2016-02-11 07:07:09
【问题描述】:
我刚刚学会了如何读取十六进制值。直到现在,我只是将它们读为正数。我听说你也可以写负十六进制值。
我的问题是我无法判断一个值是负数还是正数。 我在这里和那里找到了一些解释,但如果我尝试使用在线十六进制到十进制转换器来验证它们,它们总是会给我不同的结果。
我找到的来源:
https://stackoverflow.com/a/5827491/5016201
https://coderanch.com/t/246080/java-programmer-OCPJP/certification/Negative-Hexadecimal-number
如果我理解正确,这意味着:
如果一个十六进制值的所有位都具有 > 7 作为其第一个十六进制数字,则为负数。
All 'F '开头或第一个数字表示为负数,不计算。
例如,如果十六进制值以 32 位写入:
FFFFF63C => 负 (-2500 ?)
844fc0bb => 负 (-196099909 ?)
F44fc0bb => 负 (-196099909 ?)
FFFFFFFF => 负数 (-1 ?)
7FFFFFFF => 正面
我说的对吗?如果没有,你能告诉我我做错了什么吗?
【问题讨论】:
-
严格来说,你不能只看数字是负数还是正数;您还需要知道数字应该有多宽,以及它应该是签名还是未签名。
-
@IgnacioVazquez-Abrams 好的,假设我知道这个数字是 32 位签名的,我在我的问题中断言(粗体)是真的吗?
-
它被简化了只是足以不准确。您需要查看位 n-1,其中 n 是位大小,最右边的位是位 0。
-
@IgnacioVazquez-Abrams 谢谢,我现在看得更清楚了。
标签: hex