我做的階位操作如下一些研究:斯卡拉位操作
scala> val b = 8
b: Int = 8
scala> var c:Int = b | (1<<4)
c: Int = 24
scala> var c:Int = c | (1<<5)
c: Int = 32
我不明白,爲什麼結果看起來是正確的,當分配值從B到C,但看起來不正確時,從C到本身。第三項聲明的預期結果爲56。任何人都知道爲什麼?
我做的階位操作如下一些研究:斯卡拉位操作
scala> val b = 8
b: Int = 8
scala> var c:Int = b | (1<<4)
c: Int = 24
scala> var c:Int = c | (1<<5)
c: Int = 32
我不明白,爲什麼結果看起來是正確的,當分配值從B到C,但看起來不正確時,從C到本身。第三項聲明的預期結果爲56。任何人都知道爲什麼?
在第三行中,您正在重新定義變量c
。該REPL顯然工作在這樣一種方式,它首先建立了一個被設置爲默認值0
的變量,然後它0 | (1 << 5)
這是32
解決方法:不要重新定義變量c
,只是將其重新分配:
scala> val b = 8
b: Int = 8
scala> var c: Int = b | (1 << 4)
c: Int = 24
scala> c = c | (1 << 5) // Don't redefine c, just reassign it
c: Int = 56
在「真實」程序中(不在REPL中),不能在同一範圍內多次使用相同名稱定義相同的變量。如果您嘗試重新定義變量c
,則會出現編譯器錯誤。
因爲您使用的是repl,所以您正在重寫變量c。所以上線
var c:Int = c | (1<<5)
這是
var c:Int = 0 | (1<<5)
的equivilant這是32如果你使用像d一個新的變量,那麼你獲得56如你所願。
謝謝凱文! – Lionel
非常感謝你Jesper! – Lionel