Scala 对某些十六进制、long和int感到困惑

Scala 对某些十六进制、long和int感到困惑,scala,integer,long-integer,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 = 0xcaf

我遵循我的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
我的问题是:

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

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

为什么要这样做?我不明白发生了什么事

你没有,这只是为了表明,据我所知,前导0被忽略了 int是一个32位有符号整数:如果超过2^31,则设置最高值位,但将其解释为负数。简而言之,您有一个溢出。 如果添加l,则变量是使用64位的long,因此不会发生溢出
00FF需要2个零来确保这是一个有符号的数字,通过使用两个零来证明它是正的。 咖啡馆没有,因为它是一个负数。我们发现这是因为末尾缺少零。
最后,虽然我不确定长的一点是设置一个想法,即有看不见的零向后延伸,从而给我们一个正数。

No。有符号数使用第一位非整十六进制作为加号/减号。请不要发布您不确定的答案。首先做一些研究。2-正数和负数以称为2的补码的二进制格式存储。读一读。