2010-07-19 6 views
0

나는 최근에 질문 ("how do you multiply without using the multiplication operator, without any sort of looping statements or explicit addition")을 물었고 비트 연산에 익숙하지 않다는 것을 깨달았습니다.비트 연산을 학습하기위한 자원?

분명히 wikipedia이 있지만 나는 초보자를 대상으로 한 설명이 더 필요합니다. 이 hack guide도 있지만 아직 나는 그것을 파악하는 수준이 아닙니다.

Safari 북 및 기타 리소스를 통해 좋은 라이브러리에 액세스 할 수 있으므로 책의 장을 지적해도 괜찮습니다.

+0

하! 'a * b = ln (exp (a)^b)'. 곱셈, 루핑 또는 추가가 전혀 필요 없습니다! =) – Jens

+0

질문의 주제를 고려해 볼 때, 나는 Jen '의 주석을 ln (exp (a) XOR b)라고 읽고 어떻게 작동하는지 질문했습니다. 너무 나쁜 exp (a)는 비트 연산이 정의되지 않은 부동 소수점 값입니다. :-P – Alderath

답변

3

Knuth, 2 권 - Seminumerical 알고리즘

+0

TAOCP는 전설적인 책입니다. 임의 정밀도 정수의 주제에 대해 이야기하는 섹션을 읽는 것을 즐겼습니다. 불행히도 TAOCP를 포함한 모든 자료는 기본 유형에 대한 산술 연산의 가용성을 가정합니다. Digital Logic에 대한 교과서를 찾아야한다고 생각합니다. – AraK

+0

@AraK, 좋은 제안입니다. –

2

이것의 핵심은 "반 가산기"과 "전 가산기"내려 온다. 하프 가산기는 2 비트의 입력을 더하여 단일 비트 결과와 단일 비트 캐리를 생성합니다. 전체 가산기는 단일 비트 결과와 단일 비트 캐리를 생성하기 위해 3 비트의 입력 (2 개의 일반 입력과 하위 비트의 캐리)을 추가합니다.

어쨌든 결과는 추가 할 진리표를 기반으로합니다. 하프 가산기의 경우, 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1,1 + 1 = 0 + 캐리.

결과의 "정상적인"부분은 입력의 XOR입니다. 결과의 "캐리"부분은 입력의 AND입니다. 전체 가산기는 거의 동일하지만 악명 높은 "독자를위한 운동"으로 남았습니다. 최하위 비트는 다른 비트에 대해서는 N 비트의 입력을 더하기위한 전체 덧셈기

덧셈을 할 수 있으면 곱셈을 수행하는 몇 가지 방법이 있습니다 .NxM을 곱하기위한 쉬운 방법 예를 들어, Nx5 = Nx4 + Nx1 NxB를 생성 할 수 있습니다. 여기서 B = 2 L N을 이동하여 NxB를 생성 할 수 있습니다. L 비트만큼 왼쪽으로.