对一些十六进制,long和int感到困惑

时间:2018-04-18 21:03:36

标签: scala integer long-integer

我正在跟随我的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. 为什么在00 x之后需要额外的0x00FF

  2. 我明白为什么FF = 255 ...十六进制是从16 = 0和0F = 15开始的基数16.但为什么0xcafebabe = -889275714?

  3. 为什么要继续使用多头?我不明白发生了什么事?

2 个答案:

答案 0 :(得分:0)

  1. 你不是,只是为了表明我所知道的领先0被忽略
  2. int是一个32位有符号整数:如果超过2 ^ 31,则最高值位将被设置但被解释为减号。简而言之,你有一个溢出。
  3. 如果添加" l",变量是一个使用64位的long,所以溢出不会发生

答案 1 :(得分:-1)

<00> 00FF需要2个零以确保这是一个SIGNED数字,通过使用两个零来证明它是正数。
 cafebee没有那个,因为它是负数。我们发现因为最后缺少零 最后,长点(尽管我不确定那个)的观点是设置一个观点,即看不见的零向后伸展,从而给我们一个正数。