1
我有一個值的對象來構建一個位掩碼(赦免CoffeeScript)。在JavaScript中操作二進制值,一些混淆
flags:
segment: 1 # 00000001
tatum: 2 # 00000010
beat: 4 # 00000100
bar: 8 # 00001000
section: 16 # 00010000
現在我按照以下方式構建一個字節,使用按位或來設置特定的位。
byte = 0
byte = byte | flags.segment if data.segment
byte = byte | flags.tatum if data.tatum
byte = byte | flags.beat if data.beat
byte = byte | flags.bar if data.bar
byte = byte | flags.section if data.section
@sendByte(byte)
但問題是,爲什麼這樣工作?
我知道JavaScript將數字存儲爲雙精度浮點數。因此,這些數字的二進制表示不像一個簡單的二進制整數,對嗎?那麼,按位OR |
運算符以某種方式隱式轉換操作數?
例如,雙4
,二進制,是:
00000100
可是位運算符的工作,如果它是00000010
:
01000000 00010000 00000000 00000000 00000000 00000000 00000000 00000000
不是這上面我的評論指出值。
我知道JavaScript確實不怕隱式轉換。這似乎很奇怪,我將這些位合併在一起,但這些位與實際存儲在內存中的方式完全不同。我顯然缺少一些東西。
那麼,假設你想對浮點表示做一個按位運算呢?這似乎你不能? –
我不認爲這是可能的。另外你爲什麼要這樣? – TheHippo
好問題。我不知道,我從來沒有真正做過二進制的東西。只是感覺到了。 –