게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
navs님 다이아 해석
게시물ID : programmer_12837짧은주소 복사하기
작성자 : 네임밸류
추천 : 7
조회수 : 525회
댓글수 : 2개
등록시간 : 2015/08/19 21:08:34
navs님같은 기발한 코딩은 못하지만 아래 해석 원하시는분이 계셔서

건방지게 보일지 모르지만 제가 해석한 내용을 적어볼게요. 


일단 %c%c 로 출력하는걸 보면 앞의 %c는 변수 i로 드라이브되고, 뒤의 %c는 변수 j로 드라이브 됩니다.

결과부터 말씀드리면 앞의 %c는 SP(공백)이랑 *(별)만 찍고요

뒤의 %c는 NULL(아무것도 안찍음)과 NL(줄바꿈)만 찍습니다.

아래 그림과 같이 i,j로 컨트롤되는 %c%c가 순서대로 찍히면 별이 되는데요,

1.JPG


그럼 비트는 뭘하는거냐...하면 앞에 보셨든 각각의 %c는 찍는게 딱 두개씩있자나요.

그래서 뭘찍을지 판단하는걸 bit연산으로 하는겁니다(0일땐 뭘찍고 1일땐 뭘찍고)

원리는 navs님께서 i, j 변수에 각각 뭔가 오묘한 숫자를 넣었는데 그걸 펼치면 아래 그림과 같아요.

그리고 i >>= 1 이거는 i에 있는 비트를 우측으로 1번 시프트한 결과를 다시 i에 넣는거고,

i&1, j&1 연산이 하는 역할은 맨 우측에 있는 숫자가 1인지 0인지 판단하는겁니다.

0000 & 1 = 0
0001 & 1 = 1

이거든요.

그래서 아래와 같이 01010001 이런 반복이 %c%c를통해 뭘찍는지에 대한 규칙이라고 이해하면 편하실거에요.
실제로 navs님 코드에서 앞의 %c는 i에 저장된 값의 맨 우측 비트가 0이면 공백을찍고 1이면 별을찍습니다.
우측 %c는 j에 저장된 값의 맨 우측 비트가 0이면 아무것도 안찍고 1이면 줄바꿈을 해요.

결국에는 i,j의 초기값과 시프트-어사인 연산과 & 연산을 조합해서 하신거라고 볼수 있겠네요.

2.JPG


스케치도 지저분하고 설명이 잘 되었나 모르겠지만, 도움이 되셨길 바라고

제가 혹시 잘못알고 있는 부분 있으면 알려주시면 감사하겠습니다.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호