我刚学会了如何读取十六进制值.到现在为止,我只是把它们看作正数.我听说你也可以写负十六进制值.
我的问题是,我无法判断某个值是负数还是正数.我在这里和那里找到了一些解释,但如果我尝试使用在线的十六进制到十进制转换器来验证它们,它们总是给我不同的结果.
我找到的来源:
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,则数字为负数.
做否定的方法是:
这种表示的另一个好处(两个补码)是你只得到一个零表示,如果你通过设置MSB标记有符号数或者只是反转它们就不会出现这种情况.
据我了解,您总是需要查看最左边的数字以告知该标志。如果为十六进制,则0-7的值为正,而8-f的值为负。或者,您可以从十六进制转换为二进制,如果最左边的数字为1,则数字为负。
十六进制<->二进制<->
符号0-7 <-> 0000-0111 <-> pos
8-F <-> 1000-1111 <-> neg
| 归档时间: |
|
| 查看次数: |
59526 次 |
| 最近记录: |