메뉴 건너뛰기

관리자2020.07.30 11:00

1. 문제는 변수의 초기화 입니다.
var str;을 선언하지 않고 str 만 사용해도 변수가 잡히는 것은 맞습니다.
그런데,
str += "1" ---> str = str + "1"이니까 str 변수가 생기기는 하지만, 처음 str의 값이 초기화되지 않으면 문제가 생기겠지요.
str이 생기고 자동으로 "" 값이 들어가는 것은 어닙니다.
개발자가 변수를 초기화하지 않으면 undefined로 초기화됩니다.

var str="";은 변수 선언과 함께 str 값을 ""로 초기화하는 것입니다.

2. <<=은 책의 표 6-4에 있습니다.
v <<= 1; ---> v = v << 1;을 줄여 쓴 것입니다.
즉 변수 v의 이진수를 1비트 왼쪽으로 시프트시키는 코드입니다.

3.
v & 0x80, 즉 v에 10000000을 AND 연산시키는 이유는 현재 비트 값 1이 있는 위치에 v의 비트가 1인지 0인지 검사하려는 것입니다.
AND 연산은 둘다 1인 경우에만 1이되지요. 그래서 1000000에서 최상위 비트가 1이므로 v의 최상위 비트가 1인 경우가 아니라면 v에 어떤 값이 들어 있어도
그 결과는 0이 됩니다.
v & 0x80의 연산 결과는 0이 됩니다.
그래서 if(v & 0x80) 이 참이라는 것은 v & 0x80의 결과가 0이 아니라는 뜻입니다. 즉 v의 최상위 비트에 1이 있었다는 뜻이죠.

v가 만일 3이라면, 즉 00000011이라면
00000011 &
10000000
---> 두 값을 AND 연산하여 결과는 다음과 같이 0

00000000 


다시 v <<= 1 연산하면, v = 00000110이고, 이것과 0x80을 AND 하면
00000110 &
10000000

---> 두 값을 AND 연산하여 결과는 다음과 같이 0

00000000 



다시 v <<= 1 연산하면, v = 00001100이고, 이것과 0x80을 AND 하면
00001100 &
10000000

---> 두 값을 AND 연산하여 결과는 다음과 같이 0

00000000 



....

11000000 &
10000000

---> 두 값을 AND 연산하여 결과는 다음과 같이 0이 아님

10000000 



다시 v <<= 1 연산하면, v = 10000000이고, 이것과 0x80을 AND 하면
10000000 &
10000000

---> 두 값을 AND 연산하여 결과는 다음과 같이 0이 아님

10000000 


이렇게 작동합니다.

파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
위로