보수 개념을 인터넷에서 검색해서 찾아보고 공부하려했는데 너무 이해가 어렵고, 내가 멍청한것인가 까지 생각했습니다. 그런데 이번 강의에 짤막하게 소개된 보수개념 설명만으로도 충분히 원리가 이해되었습니다. 참.. 설명하는 방법 능력도 정말 중요한것을 새삼깨닫고갑니다. 코드도 남이보아도 이해할 수 있게 잘 구성해야겠다고도 느꼇네요
좋은 강의 감사합니다. 강좌에서 비트 연산자를 활용할 때 AND연산자나 OR연산자의 특징을 이용하던데 그러면 XOR연산자 같은 경우 기존값과 0을 연산하면 기존값이 유지되고 기존값과 1을 연산하면 기존값의 반전값이 나오게 되는 특징이 있으니까 지정한 비트를 반전시키는데 사용가능한건가요?
판단은 비트 단위로 하지만 결국 저장을 어떻게 하느냐에 따라 달라집니다. 지금처럼 하면 1바이트에 1비트 정보를 저장해서 사용하는 것으로 처리됩니다. 즉 비트 단위로 저장하는 것이 효율성을 띄게 하려면 서로 독립적이 비트 정보 8개가 1바이트를 채울 때 각 비트를 의미 있게 사용하는 것이고, 단순히 1비트 값만 사용하는 경우에는 어차피 1바이트를 사용하게 됩니다.
질문이 있어 댓글 남깁니다. 변수의 값을 2진수 형태로 확인하는 예제의 GetBit 함수에서 if (bit_num < 8) { bit_state= data & (0x01 > bit_num; } return bit_state; 로 함수를 정의해 주셨는데 앞의 다른 두 예제처럼 if (bit_num < 8) { dest_data= dest_data & (0x01 > bit_num; }
return dest_data; 로 정의해도 답은 같게 출력되더라구요. 굳이 dest_data를 bit_stata로 바꿔 함수를 정의하신 이유가 있나요? 어짜피 결과적으로 반환값이 main함수의 bit_state에 저장되게 될 텐데요 항상 좋은 강의 감사합니다.
변수를 사용하지 않고 2를 직접 사용해도 됩니다~ 뒤에서 해당 코드를 좀더 발전시킬때 사용하려고 미리 변수 개념을 사용한 것입니다. 즉, 특정 비트만 한정하지 않고 사용자가 필요한 비트를 지정하면 그 값이 변경될수 있도록 코드를 확장하기 위해서 저렇게 작업하는 것입니다.
질문 있습니다 변수의 값을 2진수 형태로 확인하는 예제에서 7-i 를 사용하셨는데 그럼 getbit함수에서 0000 0001의 1을 왼쪽으로 7번 이동, and 연산, 그리고 다시 오른쪽으로 7번 이동 시키는 건가요? 이후 반복문을 사용해 0번 이동시킬 때까지 반복하는 건가요?
ㅎㅎ 처음보면 누구에게나 다 어려운게 C 언어 입니다. 그냥 이해하려고 하지 마시고 그냥 처음부터 끝까지 한번 쭉 보시고 다시 처음부터 보기 시작하면 그 어려움의 정도가 많이 달라질 것입니다. 어렵다고 느끼는 가장 큰 이유가 이런 프로그램 공부를 처음해서 그렇다는 것을 스스로 인정하는것이 C 언어를 정복하는 첫걸음입니다.
정말 어려워했는데 .덕 분에 이해가 잘 됬습니다.
파이팅입니다 :)
39:29 GetBit함수 바로 뒤에 ; 때문에 오류가 나요
헐. 편집하다가 실수가 있었네요. 함수의 선언부 끝에 있는 ;는 제거해야 합니다 ㅎ
보수 개념을 인터넷에서 검색해서 찾아보고 공부하려했는데 너무 이해가 어렵고, 내가 멍청한것인가 까지 생각했습니다.
그런데 이번 강의에 짤막하게 소개된 보수개념 설명만으로도 충분히 원리가 이해되었습니다.
참.. 설명하는 방법 능력도 정말 중요한것을 새삼깨닫고갑니다.
코드도 남이보아도 이해할 수 있게 잘 구성해야겠다고도 느꼇네요
ㅎㅎㅎ, 무엇인가를 이해하게 되었다는 것은 행복한 일입니다! 오래된 내용이지만 제 블로그에도 약간의 내용이 있는데, 아마 강의에서 다룬 내용과 같은 내용일 겁니다.
blog.naver.com/tipsware/220413079073
여전히 비트 관련된 거는 꽤나 까다롭네요 ㅋㅋ 아우 질색 ㅋㅋ
36:35 이거는 진짜 이때까지 본 것 중에 가장 어렵네요 ㅋㅋ
마지막에 암호화 하는 건 매력적이네요 ㅋㅋ
돈 되는 기술은 다 비트 연산자 사용합니다. 공부해야 하는 이유가 분명한 기술입니다 ㅎㅎ
좋은 강의 감사합니다. 강좌에서 비트 연산자를 활용할 때 AND연산자나 OR연산자의 특징을 이용하던데 그러면 XOR연산자 같은 경우 기존값과 0을 연산하면 기존값이 유지되고 기존값과 1을 연산하면 기존값의 반전값이 나오게 되는 특징이 있으니까 지정한 비트를 반전시키는데 사용가능한건가요?
네~ 맞습니다. AND 연산은 지정한 비트의 값을 확인하거나 0으로 만들때 사용하고 OR 연산은 지정한 비트를 1로 만들 때 사용하며 XOR 연산은 지정한 비트를 토글(1이면0, 0이면 1로 만듬)에 사용됩니다 :)
@@tipsware 감사합니다!
와 난이도 갑자기 올라가네요...ㅜㅜ 포기하지 않고 책 열심히 읽어보겠습니다!
ㅎㅎㅎ 10장만 좀 어렵습니다. 원래 시프트 연산자와 비트 연산자가 어려운 내용이니 한 번에 이해하려고 하지 마시고 반복해서 여러 번 보는 것이 좋습니다~ :)
39:29 GetBit 함수에서
bit_state=desk_data &(0x01 bit_num; 에서
0000 000?로 저장되고 반환해서 이런식으로
반복문 for에서 차례대로 01110101으로 출력되는게 맞나요?
다른 결과가 나오나요?
@@tipsware 아니요. 그냥 제가 이해한 방식이 맞는지 헷갈려서요.
네~ 맞습니다!
변수의 값을 2진수 형태로 확인하는 예제에서 메인함수 부분에 왜 앞과 다르게 dest_data에 저장하지 않고 bit_state 변수를 따로 만든건가요? 따로 저장하지 않고 lamp_state에 앞처럼 그대로 젖아하면 값이 00000000으로 나오는데 이유가 먼가요?
아 처음 비트가 0이라 lamp변수가 0이 되고 그게 다시 함수로 올리니까 다 0으로 나오는건가요??
질문하실 때 타임 라인을 지정해주시면 제가 답변하기 편합니다 ㅎㅎ 메인 함수 부분에 dest_data를 사용하지 않은 것 같은데 어떤 상황과 비교하시는 건가요? 그리고 본인이 원하는 코드를 대충이라도 적어주는 것이 좋습니다.
정말 신기하다.
이해가 아주 잘 갑니다.
이해가 잘 가도록 설명 잘 해주셔서 고맙습니다.
비트를 다룰 수 있는 기초를 배울 수 있었습니다. :)
ㅎㅎ 파이팅입니다~ :)
C언어 공부중인데 맨날 숫자만 보는데 이걸 이용해서 뭘 만드는건가요? 특히 이파트는 어떻게 써먹는건지 궁금…
무엇을 만들기 보다는 메모리를 아끼거나 암호화를 할때 사용합니다. 보통 통신할때 데이터를 압축할때 사용하거나 데이터를 암호화 시킬때 사용하는 기술이라서 초보자들에게는 공감이 잘 안될겁니다.
일단 윈도우즈 프로그래밍만 시작해도 보이기 시작할테니까 개념적으로는 알아두는 것이 좋습니다.
EasyWin32와 함께 실습하는 사람들은 아래의 링크에 관련 내용이 좀 있습니다.
cafe.naver.com/easywin32/1268
강의가 많은 도움이 됩니다. 감사합니다.
파이팅입니다~ :)
선생님 특정비트값얻기에서 0010 0000을 >> 5을 통해서 0000 0001로 만들었는데
이때 0000 0001은 단위가 바이트이지 않나여? 아니면 0000 0001은 그냥 비트단위로 1로 사용가능한가요?
판단은 비트 단위로 하지만 결국 저장을 어떻게 하느냐에 따라 달라집니다. 지금처럼 하면 1바이트에 1비트 정보를 저장해서 사용하는 것으로 처리됩니다. 즉 비트 단위로 저장하는 것이 효율성을 띄게 하려면 서로 독립적이 비트 정보 8개가 1바이트를 채울 때 각 비트를 의미 있게 사용하는 것이고, 단순히 1비트 값만 사용하는 경우에는 어차피 1바이트를 사용하게 됩니다.
감사합니다
파이팅입니다~ :)
선생님 명강의 감사합니다. 하나 궁금한게 있어서 질문드립니다! 보수를 활용한 뺄셈에 대한 건데 만약에 음수+음수의 경우에는 보수처리를 어떻게해야하는지에 대해 궁금합니다. 예를 들어 -54-46 같은 경우에 어떻게 비트연산을 처리하나요?
-52는 0-52와 동일하게 생각하시면 됩니다. 사실 컴퓨터는 NEG 명령이 있어서 -52같은 값은 바로 처리됩니다.
감사합니다.
파이팅입니다~ :)
선생님 그 정수는 기본 4바이트로 처리되고 실수는 기본 8바이트로 처리된다는 내용의 카페링크 좀 다시 보내 주실수있나요?
제 블로그 글 말하시는건가요?
blog.naver.com/tipsware/221054879584
네 맞습니다.정말 감사합니다ㅠㅠ
지정한 비트를 0으로 설정하기에서
3단계 함수로 만들어 보기 파트에서 Reset_bit함수에서 1번째 줄에 맨끝쪽
~(0x01
아래의 글을 읽어보시면 알겠지만 0x01은 int로 처리됩니다.
blog.naver.com/tipsware/221054879584
4바이트로 연산하고 연산 결과를 1바이트 변수에 저장할 때 1바이트면 잘려서 들어가는 것입니다.
감사합니다!
선생님 컴퓨터에서 154-13 이라는 연산을 할 경우 더하기로 구현한다면 내부적으로 어떻게 돌아가는거죠?
154 - 13 = 141입니다.
-13에 대한 2의 보수는 243이니까 154 + 243 = 397 입니다. 그런데 이 값은 바이트 단위에 들어가지 못해서 오버플로우 발생할 것이고 남은 값은 141이 됩니다. (397 - 256 = 141)
@@tipsware 감사합니다!
질문이 있어 댓글 남깁니다.
변수의 값을 2진수 형태로 확인하는 예제의 GetBit 함수에서
if (bit_num < 8) {
bit_state= data & (0x01 > bit_num;
}
return bit_state; 로 함수를 정의해 주셨는데
앞의 다른 두 예제처럼
if (bit_num < 8) {
dest_data= dest_data & (0x01 > bit_num;
}
return dest_data; 로 정의해도 답은 같게 출력되더라구요. 굳이 dest_data를 bit_stata로 바꿔 함수를 정의하신 이유가 있나요? 어짜피 결과적으로 반환값이 main함수의 bit_state에 저장되게 될 텐데요
항상 좋은 강의 감사합니다.
네~ 변수를 재활용하셔도 됩니다. 해당 강좌에서는 이해를 좀 편하게 할 수 있도록 변수를 나누었을뿐입니다~ :)
@@tipsware 네! 감사합니다 많은 도움되고 있습니다
책 없이 강의만 봐도 충분할까요?
책없이 봐도 되지만 있는게 더 도움되기는 합니다 ㅎㅎ
제가 책의 저자라서 이런 질문에는 답변하기가 난감하네요 ㅎ
보면서 이해안되는 부분이 있어 질문합니다.
20 : 23 부분에서 굳이 bit_num변수에 2를 넣어서 사용하는 이유가 있나요?
변수 사용하지 않고 2를 넣으면 실행이 안되는 건가요?
변수를 사용하지 않고 2를 직접 사용해도 됩니다~ 뒤에서 해당 코드를 좀더 발전시킬때 사용하려고 미리 변수 개념을 사용한 것입니다. 즉, 특정 비트만 한정하지 않고 사용자가 필요한 비트를 지정하면 그 값이 변경될수 있도록 코드를 확장하기 위해서 저렇게 작업하는 것입니다.
질문 있습니다
변수의 값을 2진수 형태로 확인하는 예제에서 7-i 를 사용하셨는데 그럼 getbit함수에서 0000 0001의 1을 왼쪽으로 7번 이동, and 연산, 그리고 다시 오른쪽으로 7번 이동 시키는 건가요? 이후 반복문을 사용해 0번 이동시킬 때까지 반복하는 건가요?
첫번째 호출에서 7이 넘어갔으니 1 > 7 연산을 해서 연산의 결과를 1또는 0으로 만들려고 하는 것입니다.
시프트연산자와 비트연산자는 게임 개발자가 꿈이라면 무조건 알아야만하는 것인가요? 너무 복잡하고 외울것이많아서요. ㅠ
ㅎㅎ 게임 개발자가 아니라 그냥 개발자라면 알아야 하는 내용입니다. 물론 꼭은 아니지만, 그래도 아는게 훨씬더 좋습니다. 그리고 처음에는 익숙하지 않아서 그렇지만 어느정도 익숙해지면 쉬운 연산자들이라서 외우려고 하지말고 반복해서 사용하면서 익숙해지려고 노력하세요~ :)
이거보고 책봐도 어렵다 ㅠㅠ
ㅎㅎ 처음보면 누구에게나 다 어려운게 C 언어 입니다. 그냥 이해하려고 하지 마시고 그냥 처음부터 끝까지 한번 쭉 보시고 다시 처음부터 보기 시작하면 그 어려움의 정도가 많이 달라질 것입니다.
어렵다고 느끼는 가장 큰 이유가 이런 프로그램 공부를 처음해서 그렇다는 것을 스스로 인정하는것이
C 언어를 정복하는 첫걸음입니다.
2020-05-16