인프런 커뮤니티 질문&답변

박제영님의 프로필 이미지
박제영

작성한 질문수

외워서 끝내는 네트워크 핵심이론 - 기초

서브넷 마스크와 CIDR

서브넷 마스크에서 == 연산 질문

해결된 질문

작성

·

549

·

수정됨

0

비트 연산이 === 보다 빠른지 아닌지 궁금합니다

c언어 공부할때 비트연산이 더 빠른 것으로 기억하는데

아무리 컴퓨터가 좋아져도 네트워크 빠르게 동작하려면 비트연산 사용하는게 좋지 않을까 하는 의문이 들어 질문 드립니다.

답변 3

1

박제영님의 프로필 이미지
박제영
질문자

답변 감사드립니다.

(* 중요한 이야기는 아닌데 for문 이야기한건 특별한 이유없이 반복문에서 후치연산 쓰면 함수 한번 더 호출하고 변수 하나 더쓰고 그러니까 오버헤드 생겨서 작은 차이라 하더라도 연산이 많이되면 오버헤드 줄일수 잇는 방향으로 해야되는거 아닌가 라는 뜻으로 적었습니다 )

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

제가 질문을 정확히 이해하지는 못한 것 같습니다. 음...아무튼 사족을 좀 더 달자면
그런 작은 오버헤드나 불필요한 코드는 컴파일러 최적화 과정에서 상당수 사라집니다. 컴파일러 최적화는 정말 놀라울 정도입니다. 꼭 한 번 공부해보시라고 권합니다. 감사합니다.

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

관리적인 관점에서 더 효율적이고 직관적이며 장점이 많기 때문입니다. 그리고 이 정도의 차이는 크게 신경 쓸 정도가 아니어도 될 만큼 H/W 성능이 좋아졌습니다. 즉, 차이가 사실상 없습니다.

그리고 for문의 전치 후치 연산 차이와는 아무런 관련이 없습니다. 참고하시기 바랍니다.

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

비트연산이 관계연산자보다 보통 더 빠릅니다. 관계연산자 중 상등연산자(==)는 두 피연산자의 값이 서로 같은지 확인하는데 구체적으로는 뺄셈을 수행해 결과가 0이면 값이 같다고 판단합니다. AND, OR, XOR, NOT으로 설명할 수 있는 비트연산은 뺄셈보다는 구조가 간단합니다. 간단한 정수 뺄셈을 하기 위해서는 2의 보수(1의 보수(비트 NOT연산) + 1(덧셈))를 구한 후 다시 더하는 방식이기 때문에 조금 더 복잡합니다. 물론 이를 한 명령으로 한 번에 수행하겠지만 굳이 따지자면 그렇습니다.

그리고 어떤 32비트 정수가 짝수인지 음수인지 알아보기 위해 보통 2로 나눠 나머지를 구합니다. 그러나 비트연산을 이용하면 한 번에 아주 쉽게 끝낼 수 있습니다. x & 0x00000001의 결과를 확인하면 되니까요.

참고하시기 바랍니다.

박제영님의 프로필 이미지
박제영

작성한 질문수

질문하기