我刚刚学会了如何读取十六进制值。直到现在,我只是把它们当作正数来读。我听说你也可以写负值。
我的问题是,,我无法判断一个值是负的还是正的。我在这里和那里找到了一些解释,但是如果我试图通过在线十六进制到十进制转换器来验证它们,它们总是给出不同的结果。
我发现的消息来源:
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 =>阳性
我说的对吗?如果没有,你能告诉我我做错了什么吗?
发布于 2015-11-10 12:00:19
阅读两种补码表示:补充性
我认为理解负数(通常)是如何处理的最简单的方法是写下一个小的二进制数,然后计算出如何用一个二进制数减去。当你达到0并再次应用这个方法时,你会发现你突然得到了所有的1,这就是"-1“是如何表示的:所有的都是二进制的,所有的f都是十六进制的。通常,如果您使用有符号数字,则它们由第一个(最重要的)位表示。也就是说,如果你处理的位数是4的倍数,那么如果第一个十六进制数是8,9,A,B,C,D,E或F,那么一个数字是负的。
否定的方法是:
这种表示(两种补充)的另一个好处是,您只能得到一个零的表示,如果您通过设置MSB或只是将它们反转来标记有符号数字,情况就不是这样了。
发布于 2017-06-08 20:48:30
据我所知,你总是需要看最左边的数字才能知道这个标志。如果是十六进制,那么从0到7的任何东西都是正的,而8-f是负的.或者,您可以从十六进制转换为二进制,如果在最左边的数字中有一个1,那么这个数字是负数。
HEX <->二进制<->符号
0-7 <-> 0000-0111 <-> pos
8-F <-> 1000-1111 <-> neg
发布于 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。
https://stackoverflow.com/questions/33629416
复制相似问题