【问题标题】:Confused about some hexadecimals, longs, and int对一些十六进制、长整数和整数感到困惑
【发布时间】:2018-04-18 21:03:35
【问题描述】:

我正在阅读我的 Scala 教科书,我看到了这个:

scala> val hex = 0x5
hex: Int = 5

scala> val hex2 = 0x00ff
hex2: Int = 255

scala> val hex3 = 0xff
hex2: Int = 255

scala> var hex4 = 0xbe
magic: Int = 190

scala> var hex5 = 0xFF
magic: Int = 255

val magic = 0xcafebabe
magic: Int = -889275714

scala> var prog = 0xCAFEBABEL
prog: Long = 3405691582

scala> val tower = 35l
tower: Long = 35

我的问题:

  1. 为什么在0x00FF 中的x 之后需要额外的00

  2. 我明白为什么 FF = 255... 十六进制是 base16,从 00 = 0 和 0F = 15 开始。但为什么 0xcafebabe = -889275714?

  3. 为什么会出现多头?我不明白这是怎么回事?

【问题讨论】:

  • #2 - 正数和负数以称为“二进制补码”的二进制格式存储。阅读它here

标签: scala integer long-integer


【解决方案1】:
  1. 你没有,这只是为了表明前导 0 被忽略,据我所知
  2. int 是一个 32 位有符号整数:如果超过 2^31,则设置最高值位,但会被解释为减号。简而言之,你有一个溢出。
  3. 如果添加“l”,变量是一个使用 64 位的 long,因此不会发生溢出

【讨论】:

    【解决方案2】:

    00FF 需要两个零来确保这是一个有符号数,通过使用两个零来证明它是正数。
    cafebabe 没有,因为它是负数。我们发现这一点是因为最后没有零。
    最后,long 的意义(虽然我不确定)是设定一个想法,即存在向后延伸的看不见的零,从而给我们一个正数。

    【讨论】:

    • 没有。带符号的数字使用第一个 BIT(不是整个十六进制)作为加号/减号。请不要发布您不确定的答案。先做一些研究。
    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 2010-10-16
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多