작성
·
356
·
수정됨
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
안녕하세요 강의를 오랫만에 듣습니다. 비트마스킹 공부하기 위해 비트마스킹 인강을 듣고있는데 이 강좌는 좀 난잡하네요.
1주차 문풀 설명은 전체적으로 설명과 코드가 담백해서 좋았습니다. 그러나 비트마스킹 개념 설명 시 vs code로 자주 돌리면서 약간 어질어질하며, 불필요한 부분들은 편집으로 자르시거나 아니면 번거롭겠지만 ..
이 강의를 재 업로드하는게 좋을 거같습니다.
그 이유는 ~x = - (x + 1)에 대해 왜 같은지 설명이 없기 떄문입니다. 비트연산에서 - 역할은 무엇인지도 생략이 됬습니다. 물론 학습자 입장에선 설명이 없는 부분들은 스스로 찾아가면 되긴하지만 해당 강좌 시간은 약 19분으로 꽤 긴 시간에 불필요한 부분을 제하고 위 필요로하는 부분을 설명하는데 충분한 시간이라 짐작합니다.
참고로 최하위 켜져있는 인덱스 이전에는 이해가 잘됬습니다(shif나 비트뒤집기 등) 그러나 최하위 켜져있는 인덱스 부분부터 난잡해지기 시작했습니다.
[추가, 강의 끝까지 들은 후 작성]
18:08 에서 5 가 0101 인데 1001 로 오타. ( 의도적으로 머리 굴리기 해주신거라 믿겠습니다, 4가 계속 안나와서 보니 1001이 9이기에 xor 계산시 4가 나올리가 없죠.)
이전 부분도 가끔 오타가 있는데 강의 듣는데 차질은 없었습니다만, 이부분은 미쳐 캐치못하고 왜 4가 안나오지 계속 헤메, visual studio까지 썼네요.
본질문:
16:40 무엇때문에 ~x = -(x + 1) 이 되는지 즉 - 역할이 궁금합니다.
예)
~x = - ( x + 1)
if x == 4 :
~4 == -(4 + 1)
...1111 1011 == -5
~4가 어떻게 -5 인지 궁금합니다.
** 교안에 비트마스킹이 없는 거 같은데, 제가 못찾고 있다면 알려주시면 감사하겠습니다. ctrl-f 론 관련 검색어 찾아도 없네요
추가로 저는 해당 강의가 아닌 다른 강의를 통해 코테 알고리즘 개념들을 익혔습니다. 코테 준비를 그동안 못해 다시 리뷰할 겸 이 강의를 듣고 있는데리뷰어들의 리뷰가 이해가 됐습니다. (초심자들에겐 어려울 수 있고 이미 알고리즘 개념들을 익힌 분들에겐 괜찮은 강의란 부분, )
저의 경우는 순열과 조합 파트에서 재귀함수 사용을 다시 복습하게 되어 좋긴했습니다. 다만, 비트마스킹 부분을 보면서 초심자들의 마음을 재차 이해하기 시작했습니다. 그럼에도 불구하고
나날이 메일로 업데이트 되는 모습이 정말 질 좋은 강좌를 만드는데 노력하시는게 보여서 만족스럽습니다 ^^
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
답변 1
1
안녕하세요 ewak01님 ㅎㅎ
먼저 피드백 감사드립니다.
18:08 에서 5 가 0101 인데 1001 로 오타. ( 의도적으로 머리 굴리기 해주신거라 믿겠습니다, 4가 계속 안나와서 보니 1001이 9이기에 xor 계산시 4가 나올리가 없죠.)
>> 넵 맞네요 ㅠㅠ 틀린 부분 찾아주셔서 감사합니다.
~x = - (x + 1)에 대해 왜 같은지 설명이 없기 떄문입니다. 비트연산에서 - 역할은 무엇인지도 생략이 됬습니다.
>> ~를 하게 되면 값이 -(x + 1) 이 됩니다. ~value를 하게 되면 해당 값은 - (value + 1)이라는 값을 가지게 됩니다. 여기서 ~를 통해 비트를 뒤집은게 어떻게 -가 되는지 그 과정이 궁금하시다는 말씀이신가요?
교안에 비트마스킹이 없는 거 같은데, 제가 못찾고 있다면 알려주시면 감사하겠습니다. ctrl-f 론 관련 검색어 찾아도 없네요
>> 교안에는 비트마스킹 없습니다. 문제해설교안 - 4주차 개념강의 - 링크 들어가시면 해당 내용을 볼 수 있습니다.
이 강의를 재 업로드하는게 좋을 거같습니다.
>> 넵. ewak01님이 피드백 주신 부분들을 검토해서 업데이트하도록 하겠습니다.
감사합니다.
안녕하세요. ewak01님 ㅎㅎ
>> 보수에 대한 피드백은 참고하도록 하겠습니다. 감사합니다.
1) void t4() 함수 문제 풀이 과정
1 << 4 - 1 = 15 에서 4비트만 한정되서 계산하는게 아니냐? 일단 한정해서 계산되지는 않습니다.
이부분은 -1에 대해 잘못 이해하고 있기 때문에 그러신 것같은데
-1은 그저 -1입니다.
자, 1 << 4는 16이죠?
이 16에서 -1을 하면 15가 됩니다.
이를 이진법으로 나타내면? 01111이 됩니다.
이진법을 기반으로 계산을 해볼까요?
10000
-00001입니다.
이를 계산하면 01111이 됩니다.
우리가 십진법에서 계산할 때
10
- 3
을 계산하면 7이 나오는 것처럼 앞의 1을 오른쪽으로 땡기는 것을 생각하시면 됩니다.
2)
VS나 VScode 등에서 비트를 확인할수 있는 기능을 지원해주나요? 있다면 어느 에디터며 해당 기능이 어딨는지 궁금합니다 (디버깅 통해서도 비트연산이 잘됬는지 확인 및 공부 목적입니다)
이진수를 만드는 기능말씀하시는거죠?
그런 기능은 존재하지 않습니다.
다만 이 사이츠를 참고하시면 됩니다.
https://www.rapidtables.com/convert/number/decimal-to-binary.html
감사합니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
감사합니다.
강사 큰돌 올림.
~를 하게 되면 값이 -(x + 1) 이 됩니다. ~value를 하게 되면 해당 값은 - (value + 1)이라는 값을 가지게 됩니다. 여기서 ~를 통해 비트를 뒤집은게 어떻게 -가 되는지 그 과정이 궁금하시다는 말씀이신가요?
해당 부분 뿐만 아니라 예제 코드에서 t3 , t4 함수 모두 - 부호가 나옵니다.
- 부호에 대해 보수라는 개념을 알아야하는거 같은데, 보수를 통해 어떻게 해당 답이 나오는지 풀이 과정을 설명해주시면 "~value를 하게 되면 해당 값은 - (value + 1)이라는 값을 가지게 됩니다 " 를 단순 암기 아닌, 이해할 수 있을 것입니다. 또한, 다른 분들도 이해 도모에 큰 도움이 될거 같습니다.
(보수개념 익힌 후 추가 질문)
** 보수 개념 익히는데 참고한 곳: https://yiyj1030.tistory.com/83
1) void t4() 함수 문제 풀이 과정
cout << "4. 크기가 n인 모든 집합의 모든 비트 켜기 T4 : " << (1 << n) - 1 << "\n";
1<<n == 1 0 0 0 0 이며 여기서 -1은
0 0 0 1 을 not 연산 통해서 1 1 1 1.... 1 1 1 0 이고 여기에 +1을 하여
1 1 1 1 . .. 1 1 1 1 이 됩니다.
그 후 0 0 0 0 ... 0 0 0 1 0 0 0 0과 1 1 1 1 ... 1 1 1 1 을 더하는데 답이 15라는 건.
4비트에 한정되서 계산을 하였다는 건데 ( 0 0 0 0 + 1 1 1 1 )
왜 4비트만 계산이 되는지 궁금합니다.
(1LL <<n ) -1 을 해도 즉 자료형 접미사 LL을 붙여도 4비트만 계산하여 15가 되더군요.
2)
VS나 VScode 등에서 비트를 확인할수 있는 기능을 지원해주나요? 있다면 어느 에디터며 해당 기능이 어딨는지 궁금합니다 (디버깅 통해서도 비트연산이 잘됬는지 확인 및 공부 목적입니다)