10진수를, 8자리 2진수 문자열로 변경하는 방법
const binaryStatus = status.toString(2).padStart(8, '0');
status라는 변수의 값을 이진(binary) 형식으로 변환하고, 그 결과를 8자리로 맞추는 역할1. status.toString(2)
status: 이 변수는 숫자 값
toString(2): 이 메서드는status를 이진 문자열로 변환. 여기서2는 진법을 나타내며, 이진법(0과 1)으로 변환하라는 의미- 예: 만약
status가 5라면,toString(2)는 '101'이라는 문자열을 반환
2. padStart(8, '0')
padStart(8, '0'): 이 메서드는 문자열의 길이를 8로 맞추기 위해 사용.
- 만약 문자열의 길이가 8보다 짧다면, 문자열의 앞쪽에 '0'을 추가하여 길이를 8로 만듦
- 예: '101'이라는 문자열에 대해
padStart(8, '0')를 사용하면 '00000101'로 변환됨
- 만약
status가 255라면, 이진 변환 후 '11111111'이 되고,padStart(8, '0')는 변환된 문자열의 길이가 8이므로 변화가 없음
status = 5인 경우:
const binaryStatus = (5).toString(2).padStart(8, '0'); // '00000101'
status = 255인 경우:
const binaryStatus = (255).toString(2).padStart(8, '0'); // '11111111'
허나, 해당 8비트 문자열로 바꾸지 않더라도
아래와 같은 방식으로 비트를 비교할 수 있다.
status 값이 10진수로 표현된 정수일 때, 비트 연산(&)은 자동으로 정수의 이진 표현에 대해 수행// 각 비트의 상태 확인 const paperOut = (status & 0b00000001) !== 0;// 0번 비트 const offline = (status & 0b00000010) !== 0;// 1번 비트 const error = (status & 0b00000100) !== 0;// 2번 비트 const otherStatus = (status & 0b00001000) !== 0;// 3번 비트
비트 연산을 사용하여
status 변수의 각 비트를 확인하고, 프린터의 상태를 나타내는 여러 가지 조건을 평가. 비트 연산 설명
- 비트 연산자
&: 이 연산자는 두 개의 비트가 모두 1일 때만 1을 반환함
따라서 특정 비트를 확인하기 위해 마스크(mask)를 사용하여 해당 비트가 1인지 0인지를 판단할 수 있음
마스크란?
status가 00000101 (10진수 5)이고, 0번 비트를 확인하고 싶다고 가정하면이 경우 사용할 마스크는
00000001마스크:
00000001 (0번 비트만 1이고 나머지는 0)각 비트
outOfPaper:- 0번 비트가 1이면 용지가 없음을 나타냄
const outOfPaper = (status & 0b00000001) !== 0; // 0번 비트
printerHeadUp:- 1번 비트가 1이면 프린터 헤드가 올라가 있음을 나타냄
const printerHeadUp = (status & 0b00000010) !== 0; // 1번 비트
paperJam:- 2번 비트가 1이면 용지가 잼이 있음을 나타냄
const paperJam = (status & 0b00000100) !== 0; // 2번 비트
paperNearEnd:- 3번 비트가 1이면 용지가 거의 다 떨어져 있음을 나타냄
const paperNearEnd = (status & 0b00001000) !== 0; // 3번 비트
printingOrFeeding:- 4번 비트가 1이면 프린팅 중이거나 용지를 공급 중임을 나타냄
const printingOrFeeding = (status & 0b00010000) !== 0; // 4번 비트
cutterError:- 5번 비트가 1이면 컷터에 에러가 있음을 나타냅니다.
const cutterError = (status & 0b00100000) !== 0; // 5번 비트
unused:- 6번 비트는 사용되지 않음을 나타내며, 항상 0이어야 함
const unused = (status & 0b01000000) !== 0; // 6번 비트
paperInAuxSensor:- 7번 비트가 1이면 보조 센서에 용지가 있음을 나타냄
const paperInAuxSensor = (status & 0b10000000) !== 0; // 7번 비트