나는 (CoffeeScript를 용서하십시오.) 비트 마스크를 만들기위한 값 객체를 가지고 있습니다.JavaScript에서 이진 값 조작, 약간의 혼란
flags:
segment: 1 # 00000001
tatum: 2 # 00000010
beat: 4 # 00000100
bar: 8 # 00001000
section: 16 # 00010000
이제 특정 비트를 설정하기 위해 비트 OR을 사용하여 다음과 같은 방식으로 바이트를 구성합니다.
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는 숫자가 배정도 수레로 저장된다는 것을 알고 있습니다. 따라서 그 수의 2 진 표현은 단순한 2 진 정수와 같지 않습니다. 그래서 bitwise OR |
연산자는 어떻게 든 피연산자를 암시 적으로 변환합니까? 예를 들어
, 이중 4
, 이진,이다 : 그것은 00000010
것처럼 아직
00000100
그리고 비트 연산자 작업 : 위 내 댓글에 명시된
01000000 00010000 00000000 00000000 00000000 00000000 00000000 00000000
수 없음이 값 .
JavaScript는 암시 적 변환을 두려워하지 않는다는 것을 알고 있습니다. 여기에 비트를 결합하는 것이 이상하게 보일 수 있지만 비트는 실제로 값이 메모리에 저장되는 방식과 완전히 다릅니다. 나는 분명히 뭔가를 놓치고있다.
그래서, 부동 소수점 표현에 대해 비트 연산을 수행하기를 원한다면 어떻게 될까요? 네가 할 수없는 것처럼 보일까? –
나는 그것이 가능할 것이라고 생각하지 않는다. 왜 이걸 원하니? – TheHippo
좋은 질문입니다. 나도 모르겠다. 전에 바이너리를 해 본 적이 없다. 그냥 기분 전환. –