首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何判断十六进制值是否为负值?

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

Stack Overflow用户
提问于 2015-11-10 11:55:36
回答 4查看 133.7K关注 0票数 20

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

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

我发现的消息来源:

https://stackoverflow.com/a/5827491/5016201

https://coderanch.com/t/246080/java-programmer-OCPJP/certification/Negative-Hexadecimal-number

如果我理解正确,这意味着:

如果一个十六进制值的第一个十六进制位数大于7,则为负值。

开头或第一个数字的所有'F‘都是负值,不是计算出来的。

例如,如果十六进制值是用32位写成的:

FFFFF63C =>阴性( -2500 ?)

844 fc0bb =>阴性( -196099909 ?)

F44fc0bb =>阴性( -196099909 ?)

=>阴性( -1 ?)

7FFFFFFF =>阳性

我说的对吗?如果没有,你能告诉我我做错了什么吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-10 12:00:19

阅读两种补码表示:补充性

我认为理解负数(通常)是如何处理的最简单的方法是写下一个小的二进制数,然后计算出如何用一个二进制数减去。当你达到0并再次应用这个方法时,你会发现你突然得到了所有的1,这就是"-1“是如何表示的:所有的都是二进制的,所有的f都是十六进制的。通常,如果您使用有符号数字,则它们由第一个(最重要的)位表示。也就是说,如果你处理的位数是4的倍数,那么如果第一个十六进制数是8,9,A,B,C,D,E或F,那么一个数字是负的。

否定的方法是:

  1. 倒置所有位元
  2. 加1

这种表示(两种补充)的另一个好处是,您只能得到一个零的表示,如果您通过设置MSB或只是将它们反转来标记有符号数字,情况就不是这样了。

票数 20
EN

Stack Overflow用户

发布于 2017-06-08 20:48:30

据我所知,你总是需要看最左边的数字才能知道这个标志。如果是十六进制,那么从0到7的任何东西都是正的,而8-f是负的.或者,您可以从十六进制转换为二进制,如果在最左边的数字中有一个1,那么这个数字是负数。

HEX <->二进制<->符号

0-7 <-> 0000-0111 <-> pos

8-F <-> 1000-1111 <-> neg

票数 18
EN

Stack Overflow用户

发布于 2015-11-10 12:02:07

论坛中的答案看上去不错:

每个十六进制“数字”是4位。高阶位置的d为1101。所以你看,它有一个很高的一点,所以整个数字是负数。

十六进制数总是正数(除非你在它前面特别加上一个负号)。一旦将它存储在特定的数据类型中,它可能被解释为负数。只有这样,最重要的位( MSB )才会起作用,但它是“存储在该数据类型中”的数字的MSB。在这方面,上面的答案只是部分正确:只有在实际数据类型(如int或long)的上下文中,MSB才起作用。 如果您将“0 xd咖啡馆”存储在一个int中,则表示为"0000 0000 1101 1100 1010111110“-- MSB为0。而“0 x死咖啡馆”的表示法是"1101 1110 1010 1101 1100 101111 1110“- MSB为1。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33629416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档