메뉴 건너뛰기

2020.07.30 08:55

예제 6-13 질문이요!

조회 수 145 댓글 2

예제 6-13 코드중에서


function digit8(v) { // 숫자 v를 8비트 2진수로 변환
    var str="";
    for(i=0; i<8; i++, v<<=1) {
        if((v & 0x80)) str += "1";
        else str += "0";
    }
    return str;
}

질문1. var str="" 이란 코드를 안쓰면 웹페이지상에 출력이 안되더라구요.

근데 변수 같은 경우에 따로 var x;를 선언하지 않아도

x=10; 이라고 써놓으면 알아서 x 변수가 만들어진다고 책에서 보았는데

문자열 같은경우는 var str=""; 이라고 선언해놓지 않으면

str+="hi" 라고 써놓는다고 해서 str이 자동으로 만들어지는 게 아닌가요?!

질문2.

어떤 식으로 10진수를 2진수 숫자로 바꾸어 출력하는지는 감이 잡히는데요.

0x80이 10000000 니까 1이 겹치면 str에 1을 추가하고 x를 왼쪽으로 시프트하는 작업을 8번 반복하는 것 같습니다.

여기서 v<<=1 에서 <<=은 <<와 같은 건가요? <<=이걸로 왼쪽으로 시프트 하는 것 같은데 '='는 왜 들어가있는 건지 궁금합니다

책에선 <<, >>, >>> 만 나와있어서요.

답변 주시면 감사하게씁니다

?
  • ?
    관리자 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 


    이렇게 작동합니다.

  • ?
    궁그미 2020.07.30 12:03
    빠른 답변에 감동받았습니다~~ 감사합니다

QnA

공부하면서 궁금했던 것을 질문해보세요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18282
403 혹시 예전 서적인 "DHTML + 자바스크립트 프로그래밍"의 예제를 받을 수 있는 방법은 없는지요? 2 비만타쿠미 2018.09.26 116
402 한글html 1 키보드 향기 2020.03.29 922
401 한글 타이틀이 깨져 보입니다. 1 안스가리오 2020.01.06 116
400 표와 div span 4 키보드 향기 2020.04.05 109
399 페이지에 첨부하고 싶은 이미지의 위치에대해 궁금합니다 1 정택희 2017.02.13 277
398 페이지 247 에 있는 Open Challenge 05 의 CSS3로 태그 배치하기를 공부하고 있는데 질문드립니다. 1 file 워니고 2018.03.28 3878
397 테스트 관리자 2019.08.30 171
396 태그와 속성 2 tc0712 2021.09.08 72
395 크롬 오디오 자동재생 관련 질문입니다! 1 ^_^ 2018.09.30 449
394 코드 잘못된 부분을 봐주시면 정말 감사하겠습니다 1 file 입문한 사람 2020.04.01 607
393 캔버스 관련 질문 1 원그리기 2021.08.22 101
392 챕터2 연습문제 8번 김석현 2018.04.22 156
391 챕터 3의 10번 문제 1 컴공과 입문 2018.03.20 125
390 책을 종이책으로 구매했는데 1 ddd 2024.03.21 103
389 책을 마치며 7 은성 2017.04.13 492
388 책 151p 3장 오픈챌린지 문제질문입니다. 3 이상민 2019.07.19 239
387 짝수번 정답 3 idididid 2017.12.24 3136
386 질문입니다 1 1213 2018.03.06 420
385 질문드립니다. 1 ㅇㅇ 2020.06.03 306
384 질문 있습니다. 2 2021.08.19 134
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 21 Next
/ 21
위로